#include "precomp.h"
// @(#)$Id$
//
// Evita Lexer - FileLexer
//
// Copyright (C) 2010 by Project Vogue.
// Written by Yoshifumi "VOGUE" INOUE. (yosi@msn.com)

#include "./Char.h"

#include "./String.h"
#include "./UnicodeCategory.h"

namespace Common {

struct CatEntry {
  uint16  m_nMin;
  uint16  m_nMax;
  UnicodeCategory m_eCategory;
}; // CatEntry

static CatEntry const k_rgoCatEntry[] = {
    { 0, 31, UnicodeCategory_Control },
    { 32, 32, UnicodeCategory_SpaceSeparator },
    { 33, 35,  UnicodeCategory_OtherPunctuation },
    { 36, 36, UnicodeCategory_CurrencyName },
    { 37, 39,  UnicodeCategory_OtherPunctuation },
    { 40, 40, UnicodeCategory_OpenPunctuation },
    { 41, 41, UnicodeCategory_ClosePunctuation },
    { 42, 42,  UnicodeCategory_OtherPunctuation },
    { 43, 43, UnicodeCategory_MathName },
    { 44, 44,  UnicodeCategory_OtherPunctuation },
    { 45, 45, UnicodeCategory_DashPunctuation },
    { 46, 47,  UnicodeCategory_OtherPunctuation },
    { 48, 57, UnicodeCategory_DecimalDigitNumber },
    { 58, 59,  UnicodeCategory_OtherPunctuation },
    { 60, 62, UnicodeCategory_MathName },
    { 63, 64,  UnicodeCategory_OtherPunctuation },
    { 65, 90, UnicodeCategory_UppercaseLetter },
    { 91, 91, UnicodeCategory_OpenPunctuation },
    { 92, 92,  UnicodeCategory_OtherPunctuation },
    { 93, 93, UnicodeCategory_ClosePunctuation },
    { 94, 94, UnicodeCategory_ModifierName },
    { 95, 95, UnicodeCategory_ConnectorPunctuation },
    { 96, 96, UnicodeCategory_ModifierName },
    { 97, 122, UnicodeCategory_LowercaseLetter },
    { 123, 123, UnicodeCategory_OpenPunctuation },
    { 124, 124, UnicodeCategory_MathName },
    { 125, 125, UnicodeCategory_ClosePunctuation },
    { 126, 126, UnicodeCategory_MathName },
    { 127, 159, UnicodeCategory_Control },
    { 160, 160, UnicodeCategory_SpaceSeparator },
    { 161, 161,  UnicodeCategory_OtherPunctuation },
    { 162, 165, UnicodeCategory_CurrencyName },
    { 166, 167, UnicodeCategory_OtherName },
    { 168, 168, UnicodeCategory_ModifierName },
    { 169, 169, UnicodeCategory_OtherName },
    { 170, 170, UnicodeCategory_LowercaseLetter },
    { 171, 171, UnicodeCategory_InitialPunctuation },
    { 172, 172, UnicodeCategory_MathName },
    { 173, 173, UnicodeCategory_OtherFormat },
    { 174, 174, UnicodeCategory_OtherName },
    { 175, 175, UnicodeCategory_ModifierName },
    { 176, 176, UnicodeCategory_OtherName },
    { 177, 177, UnicodeCategory_MathName },
    { 178, 179, UnicodeCategory_OtherNumber },
    { 180, 180, UnicodeCategory_ModifierName },
    { 181, 181, UnicodeCategory_LowercaseLetter },
    { 182, 182, UnicodeCategory_OtherName },
    { 183, 183,  UnicodeCategory_OtherPunctuation },
    { 184, 184, UnicodeCategory_ModifierName },
    { 185, 185, UnicodeCategory_OtherNumber },
    { 186, 186, UnicodeCategory_LowercaseLetter },
    { 187, 187, UnicodeCategory_FinalPunctuation },
    { 188, 190, UnicodeCategory_OtherNumber },
    { 191, 191,  UnicodeCategory_OtherPunctuation },
    { 192, 214, UnicodeCategory_UppercaseLetter },
    { 215, 215, UnicodeCategory_MathName },
    { 216, 222, UnicodeCategory_UppercaseLetter },
    { 223, 246, UnicodeCategory_LowercaseLetter },
    { 247, 247, UnicodeCategory_MathName },
    { 248, 255, UnicodeCategory_LowercaseLetter },
    { 256, 256, UnicodeCategory_UppercaseLetter },
    { 257, 257, UnicodeCategory_LowercaseLetter },
    { 258, 258, UnicodeCategory_UppercaseLetter },
    { 259, 259, UnicodeCategory_LowercaseLetter },
    { 260, 260, UnicodeCategory_UppercaseLetter },
    { 261, 261, UnicodeCategory_LowercaseLetter },
    { 262, 262, UnicodeCategory_UppercaseLetter },
    { 263, 263, UnicodeCategory_LowercaseLetter },
    { 264, 264, UnicodeCategory_UppercaseLetter },
    { 265, 265, UnicodeCategory_LowercaseLetter },
    { 266, 266, UnicodeCategory_UppercaseLetter },
    { 267, 267, UnicodeCategory_LowercaseLetter },
    { 268, 268, UnicodeCategory_UppercaseLetter },
    { 269, 269, UnicodeCategory_LowercaseLetter },
    { 270, 270, UnicodeCategory_UppercaseLetter },
    { 271, 271, UnicodeCategory_LowercaseLetter },
    { 272, 272, UnicodeCategory_UppercaseLetter },
    { 273, 273, UnicodeCategory_LowercaseLetter },
    { 274, 274, UnicodeCategory_UppercaseLetter },
    { 275, 275, UnicodeCategory_LowercaseLetter },
    { 276, 276, UnicodeCategory_UppercaseLetter },
    { 277, 277, UnicodeCategory_LowercaseLetter },
    { 278, 278, UnicodeCategory_UppercaseLetter },
    { 279, 279, UnicodeCategory_LowercaseLetter },
    { 280, 280, UnicodeCategory_UppercaseLetter },
    { 281, 281, UnicodeCategory_LowercaseLetter },
    { 282, 282, UnicodeCategory_UppercaseLetter },
    { 283, 283, UnicodeCategory_LowercaseLetter },
    { 284, 284, UnicodeCategory_UppercaseLetter },
    { 285, 285, UnicodeCategory_LowercaseLetter },
    { 286, 286, UnicodeCategory_UppercaseLetter },
    { 287, 287, UnicodeCategory_LowercaseLetter },
    { 288, 288, UnicodeCategory_UppercaseLetter },
    { 289, 289, UnicodeCategory_LowercaseLetter },
    { 290, 290, UnicodeCategory_UppercaseLetter },
    { 291, 291, UnicodeCategory_LowercaseLetter },
    { 292, 292, UnicodeCategory_UppercaseLetter },
    { 293, 293, UnicodeCategory_LowercaseLetter },
    { 294, 294, UnicodeCategory_UppercaseLetter },
    { 295, 295, UnicodeCategory_LowercaseLetter },
    { 296, 296, UnicodeCategory_UppercaseLetter },
    { 297, 297, UnicodeCategory_LowercaseLetter },
    { 298, 298, UnicodeCategory_UppercaseLetter },
    { 299, 299, UnicodeCategory_LowercaseLetter },
    { 300, 300, UnicodeCategory_UppercaseLetter },
    { 301, 301, UnicodeCategory_LowercaseLetter },
    { 302, 302, UnicodeCategory_UppercaseLetter },
    { 303, 303, UnicodeCategory_LowercaseLetter },
    { 304, 304, UnicodeCategory_UppercaseLetter },
    { 305, 305, UnicodeCategory_LowercaseLetter },
    { 306, 306, UnicodeCategory_UppercaseLetter },
    { 307, 307, UnicodeCategory_LowercaseLetter },
    { 308, 308, UnicodeCategory_UppercaseLetter },
    { 309, 309, UnicodeCategory_LowercaseLetter },
    { 310, 310, UnicodeCategory_UppercaseLetter },
    { 311, 312, UnicodeCategory_LowercaseLetter },
    { 313, 313, UnicodeCategory_UppercaseLetter },
    { 314, 314, UnicodeCategory_LowercaseLetter },
    { 315, 315, UnicodeCategory_UppercaseLetter },
    { 316, 316, UnicodeCategory_LowercaseLetter },
    { 317, 317, UnicodeCategory_UppercaseLetter },
    { 318, 318, UnicodeCategory_LowercaseLetter },
    { 319, 319, UnicodeCategory_UppercaseLetter },
    { 320, 320, UnicodeCategory_LowercaseLetter },
    { 321, 321, UnicodeCategory_UppercaseLetter },
    { 322, 322, UnicodeCategory_LowercaseLetter },
    { 323, 323, UnicodeCategory_UppercaseLetter },
    { 324, 324, UnicodeCategory_LowercaseLetter },
    { 325, 325, UnicodeCategory_UppercaseLetter },
    { 326, 326, UnicodeCategory_LowercaseLetter },
    { 327, 327, UnicodeCategory_UppercaseLetter },
    { 328, 329, UnicodeCategory_LowercaseLetter },
    { 330, 330, UnicodeCategory_UppercaseLetter },
    { 331, 331, UnicodeCategory_LowercaseLetter },
    { 332, 332, UnicodeCategory_UppercaseLetter },
    { 333, 333, UnicodeCategory_LowercaseLetter },
    { 334, 334, UnicodeCategory_UppercaseLetter },
    { 335, 335, UnicodeCategory_LowercaseLetter },
    { 336, 336, UnicodeCategory_UppercaseLetter },
    { 337, 337, UnicodeCategory_LowercaseLetter },
    { 338, 338, UnicodeCategory_UppercaseLetter },
    { 339, 339, UnicodeCategory_LowercaseLetter },
    { 340, 340, UnicodeCategory_UppercaseLetter },
    { 341, 341, UnicodeCategory_LowercaseLetter },
    { 342, 342, UnicodeCategory_UppercaseLetter },
    { 343, 343, UnicodeCategory_LowercaseLetter },
    { 344, 344, UnicodeCategory_UppercaseLetter },
    { 345, 345, UnicodeCategory_LowercaseLetter },
    { 346, 346, UnicodeCategory_UppercaseLetter },
    { 347, 347, UnicodeCategory_LowercaseLetter },
    { 348, 348, UnicodeCategory_UppercaseLetter },
    { 349, 349, UnicodeCategory_LowercaseLetter },
    { 350, 350, UnicodeCategory_UppercaseLetter },
    { 351, 351, UnicodeCategory_LowercaseLetter },
    { 352, 352, UnicodeCategory_UppercaseLetter },
    { 353, 353, UnicodeCategory_LowercaseLetter },
    { 354, 354, UnicodeCategory_UppercaseLetter },
    { 355, 355, UnicodeCategory_LowercaseLetter },
    { 356, 356, UnicodeCategory_UppercaseLetter },
    { 357, 357, UnicodeCategory_LowercaseLetter },
    { 358, 358, UnicodeCategory_UppercaseLetter },
    { 359, 359, UnicodeCategory_LowercaseLetter },
    { 360, 360, UnicodeCategory_UppercaseLetter },
    { 361, 361, UnicodeCategory_LowercaseLetter },
    { 362, 362, UnicodeCategory_UppercaseLetter },
    { 363, 363, UnicodeCategory_LowercaseLetter },
    { 364, 364, UnicodeCategory_UppercaseLetter },
    { 365, 365, UnicodeCategory_LowercaseLetter },
    { 366, 366, UnicodeCategory_UppercaseLetter },
    { 367, 367, UnicodeCategory_LowercaseLetter },
    { 368, 368, UnicodeCategory_UppercaseLetter },
    { 369, 369, UnicodeCategory_LowercaseLetter },
    { 370, 370, UnicodeCategory_UppercaseLetter },
    { 371, 371, UnicodeCategory_LowercaseLetter },
    { 372, 372, UnicodeCategory_UppercaseLetter },
    { 373, 373, UnicodeCategory_LowercaseLetter },
    { 374, 374, UnicodeCategory_UppercaseLetter },
    { 375, 375, UnicodeCategory_LowercaseLetter },
    { 376, 377, UnicodeCategory_UppercaseLetter },
    { 378, 378, UnicodeCategory_LowercaseLetter },
    { 379, 379, UnicodeCategory_UppercaseLetter },
    { 380, 380, UnicodeCategory_LowercaseLetter },
    { 381, 381, UnicodeCategory_UppercaseLetter },
    { 382, 384, UnicodeCategory_LowercaseLetter },
    { 385, 386, UnicodeCategory_UppercaseLetter },
    { 387, 387, UnicodeCategory_LowercaseLetter },
    { 388, 388, UnicodeCategory_UppercaseLetter },
    { 389, 389, UnicodeCategory_LowercaseLetter },
    { 390, 391, UnicodeCategory_UppercaseLetter },
    { 392, 392, UnicodeCategory_LowercaseLetter },
    { 393, 395, UnicodeCategory_UppercaseLetter },
    { 396, 397, UnicodeCategory_LowercaseLetter },
    { 398, 401, UnicodeCategory_UppercaseLetter },
    { 402, 402, UnicodeCategory_LowercaseLetter },
    { 403, 404, UnicodeCategory_UppercaseLetter },
    { 405, 405, UnicodeCategory_LowercaseLetter },
    { 406, 408, UnicodeCategory_UppercaseLetter },
    { 409, 411, UnicodeCategory_LowercaseLetter },
    { 412, 413, UnicodeCategory_UppercaseLetter },
    { 414, 414, UnicodeCategory_LowercaseLetter },
    { 415, 416, UnicodeCategory_UppercaseLetter },
    { 417, 417, UnicodeCategory_LowercaseLetter },
    { 418, 418, UnicodeCategory_UppercaseLetter },
    { 419, 419, UnicodeCategory_LowercaseLetter },
    { 420, 420, UnicodeCategory_UppercaseLetter },
    { 421, 421, UnicodeCategory_LowercaseLetter },
    { 422, 423, UnicodeCategory_UppercaseLetter },
    { 424, 424, UnicodeCategory_LowercaseLetter },
    { 425, 425, UnicodeCategory_UppercaseLetter },
    { 426, 427, UnicodeCategory_LowercaseLetter },
    { 428, 428, UnicodeCategory_UppercaseLetter },
    { 429, 429, UnicodeCategory_LowercaseLetter },
    { 430, 431, UnicodeCategory_UppercaseLetter },
    { 432, 432, UnicodeCategory_LowercaseLetter },
    { 433, 435, UnicodeCategory_UppercaseLetter },
    { 436, 436, UnicodeCategory_LowercaseLetter },
    { 437, 437, UnicodeCategory_UppercaseLetter },
    { 438, 438, UnicodeCategory_LowercaseLetter },
    { 439, 440, UnicodeCategory_UppercaseLetter },
    { 441, 442, UnicodeCategory_LowercaseLetter },
    { 443, 443, UnicodeCategory_OtherLetter },
    { 444, 444, UnicodeCategory_UppercaseLetter },
    { 445, 447, UnicodeCategory_LowercaseLetter },
    { 448, 451, UnicodeCategory_OtherLetter },
    { 452, 452, UnicodeCategory_UppercaseLetter },
    { 453, 453, UnicodeCategory_TitleccaseLetter },
    { 454, 454, UnicodeCategory_LowercaseLetter },
    { 455, 455, UnicodeCategory_UppercaseLetter },
    { 456, 456, UnicodeCategory_TitleccaseLetter },
    { 457, 457, UnicodeCategory_LowercaseLetter },
    { 458, 458, UnicodeCategory_UppercaseLetter },
    { 459, 459, UnicodeCategory_TitleccaseLetter },
    { 460, 460, UnicodeCategory_LowercaseLetter },
    { 461, 461, UnicodeCategory_UppercaseLetter },
    { 462, 462, UnicodeCategory_LowercaseLetter },
    { 463, 463, UnicodeCategory_UppercaseLetter },
    { 464, 464, UnicodeCategory_LowercaseLetter },
    { 465, 465, UnicodeCategory_UppercaseLetter },
    { 466, 466, UnicodeCategory_LowercaseLetter },
    { 467, 467, UnicodeCategory_UppercaseLetter },
    { 468, 468, UnicodeCategory_LowercaseLetter },
    { 469, 469, UnicodeCategory_UppercaseLetter },
    { 470, 470, UnicodeCategory_LowercaseLetter },
    { 471, 471, UnicodeCategory_UppercaseLetter },
    { 472, 472, UnicodeCategory_LowercaseLetter },
    { 473, 473, UnicodeCategory_UppercaseLetter },
    { 474, 474, UnicodeCategory_LowercaseLetter },
    { 475, 475, UnicodeCategory_UppercaseLetter },
    { 476, 477, UnicodeCategory_LowercaseLetter },
    { 478, 478, UnicodeCategory_UppercaseLetter },
    { 479, 479, UnicodeCategory_LowercaseLetter },
    { 480, 480, UnicodeCategory_UppercaseLetter },
    { 481, 481, UnicodeCategory_LowercaseLetter },
    { 482, 482, UnicodeCategory_UppercaseLetter },
    { 483, 483, UnicodeCategory_LowercaseLetter },
    { 484, 484, UnicodeCategory_UppercaseLetter },
    { 485, 485, UnicodeCategory_LowercaseLetter },
    { 486, 486, UnicodeCategory_UppercaseLetter },
    { 487, 487, UnicodeCategory_LowercaseLetter },
    { 488, 488, UnicodeCategory_UppercaseLetter },
    { 489, 489, UnicodeCategory_LowercaseLetter },
    { 490, 490, UnicodeCategory_UppercaseLetter },
    { 491, 491, UnicodeCategory_LowercaseLetter },
    { 492, 492, UnicodeCategory_UppercaseLetter },
    { 493, 493, UnicodeCategory_LowercaseLetter },
    { 494, 494, UnicodeCategory_UppercaseLetter },
    { 495, 496, UnicodeCategory_LowercaseLetter },
    { 497, 497, UnicodeCategory_UppercaseLetter },
    { 498, 498, UnicodeCategory_TitleccaseLetter },
    { 499, 499, UnicodeCategory_LowercaseLetter },
    { 500, 500, UnicodeCategory_UppercaseLetter },
    { 501, 501, UnicodeCategory_LowercaseLetter },
    { 502, 504, UnicodeCategory_UppercaseLetter },
    { 505, 505, UnicodeCategory_LowercaseLetter },
    { 506, 506, UnicodeCategory_UppercaseLetter },
    { 507, 507, UnicodeCategory_LowercaseLetter },
    { 508, 508, UnicodeCategory_UppercaseLetter },
    { 509, 509, UnicodeCategory_LowercaseLetter },
    { 510, 510, UnicodeCategory_UppercaseLetter },
    { 511, 511, UnicodeCategory_LowercaseLetter },
    { 512, 512, UnicodeCategory_UppercaseLetter },
    { 513, 513, UnicodeCategory_LowercaseLetter },
    { 514, 514, UnicodeCategory_UppercaseLetter },
    { 515, 515, UnicodeCategory_LowercaseLetter },
    { 516, 516, UnicodeCategory_UppercaseLetter },
    { 517, 517, UnicodeCategory_LowercaseLetter },
    { 518, 518, UnicodeCategory_UppercaseLetter },
    { 519, 519, UnicodeCategory_LowercaseLetter },
    { 520, 520, UnicodeCategory_UppercaseLetter },
    { 521, 521, UnicodeCategory_LowercaseLetter },
    { 522, 522, UnicodeCategory_UppercaseLetter },
    { 523, 523, UnicodeCategory_LowercaseLetter },
    { 524, 524, UnicodeCategory_UppercaseLetter },
    { 525, 525, UnicodeCategory_LowercaseLetter },
    { 526, 526, UnicodeCategory_UppercaseLetter },
    { 527, 527, UnicodeCategory_LowercaseLetter },
    { 528, 528, UnicodeCategory_UppercaseLetter },
    { 529, 529, UnicodeCategory_LowercaseLetter },
    { 530, 530, UnicodeCategory_UppercaseLetter },
    { 531, 531, UnicodeCategory_LowercaseLetter },
    { 532, 532, UnicodeCategory_UppercaseLetter },
    { 533, 533, UnicodeCategory_LowercaseLetter },
    { 534, 534, UnicodeCategory_UppercaseLetter },
    { 535, 535, UnicodeCategory_LowercaseLetter },
    { 536, 536, UnicodeCategory_UppercaseLetter },
    { 537, 537, UnicodeCategory_LowercaseLetter },
    { 538, 538, UnicodeCategory_UppercaseLetter },
    { 539, 539, UnicodeCategory_LowercaseLetter },
    { 540, 540, UnicodeCategory_UppercaseLetter },
    { 541, 541, UnicodeCategory_LowercaseLetter },
    { 542, 542, UnicodeCategory_UppercaseLetter },
    { 543, 543, UnicodeCategory_LowercaseLetter },
    { 544, 544, UnicodeCategory_UppercaseLetter },
    { 545, 545, UnicodeCategory_LowercaseLetter },
    { 546, 546, UnicodeCategory_UppercaseLetter },
    { 547, 547, UnicodeCategory_LowercaseLetter },
    { 548, 548, UnicodeCategory_UppercaseLetter },
    { 549, 549, UnicodeCategory_LowercaseLetter },
    { 550, 550, UnicodeCategory_UppercaseLetter },
    { 551, 551, UnicodeCategory_LowercaseLetter },
    { 552, 552, UnicodeCategory_UppercaseLetter },
    { 553, 553, UnicodeCategory_LowercaseLetter },
    { 554, 554, UnicodeCategory_UppercaseLetter },
    { 555, 555, UnicodeCategory_LowercaseLetter },
    { 556, 556, UnicodeCategory_UppercaseLetter },
    { 557, 557, UnicodeCategory_LowercaseLetter },
    { 558, 558, UnicodeCategory_UppercaseLetter },
    { 559, 559, UnicodeCategory_LowercaseLetter },
    { 560, 560, UnicodeCategory_UppercaseLetter },
    { 561, 561, UnicodeCategory_LowercaseLetter },
    { 562, 562, UnicodeCategory_UppercaseLetter },
    { 563, 566, UnicodeCategory_LowercaseLetter },
    { 592, 687, UnicodeCategory_LowercaseLetter },
    { 688, 705, UnicodeCategory_ModifierLetter },
    { 706, 709, UnicodeCategory_ModifierName },
    { 710, 721, UnicodeCategory_ModifierLetter },
    { 722, 735, UnicodeCategory_ModifierName },
    { 736, 740, UnicodeCategory_ModifierLetter },
    { 741, 749, UnicodeCategory_ModifierName },
    { 750, 750, UnicodeCategory_ModifierLetter },
    { 751, 767, UnicodeCategory_ModifierName },
    { 768, 855, UnicodeCategory_NonSpacingMark },
    { 861, 879, UnicodeCategory_NonSpacingMark },
    { 884, 885, UnicodeCategory_ModifierName },
    { 890, 890, UnicodeCategory_ModifierLetter },
    { 894, 894,  UnicodeCategory_OtherPunctuation },
    { 900, 901, UnicodeCategory_ModifierName },
    { 902, 902, UnicodeCategory_UppercaseLetter },
    { 903, 903,  UnicodeCategory_OtherPunctuation },
    { 904, 906, UnicodeCategory_UppercaseLetter },
    { 908, 908, UnicodeCategory_UppercaseLetter },
    { 910, 911, UnicodeCategory_UppercaseLetter },
    { 912, 912, UnicodeCategory_LowercaseLetter },
    { 913, 929, UnicodeCategory_UppercaseLetter },
    { 931, 939, UnicodeCategory_UppercaseLetter },
    { 940, 974, UnicodeCategory_LowercaseLetter },
    { 976, 977, UnicodeCategory_LowercaseLetter },
    { 978, 980, UnicodeCategory_UppercaseLetter },
    { 981, 983, UnicodeCategory_LowercaseLetter },
    { 984, 984, UnicodeCategory_UppercaseLetter },
    { 985, 985, UnicodeCategory_LowercaseLetter },
    { 986, 986, UnicodeCategory_UppercaseLetter },
    { 987, 987, UnicodeCategory_LowercaseLetter },
    { 988, 988, UnicodeCategory_UppercaseLetter },
    { 989, 989, UnicodeCategory_LowercaseLetter },
    { 990, 990, UnicodeCategory_UppercaseLetter },
    { 991, 991, UnicodeCategory_LowercaseLetter },
    { 992, 992, UnicodeCategory_UppercaseLetter },
    { 993, 993, UnicodeCategory_LowercaseLetter },
    { 994, 994, UnicodeCategory_UppercaseLetter },
    { 995, 995, UnicodeCategory_LowercaseLetter },
    { 996, 996, UnicodeCategory_UppercaseLetter },
    { 997, 997, UnicodeCategory_LowercaseLetter },
    { 998, 998, UnicodeCategory_UppercaseLetter },
    { 999, 999, UnicodeCategory_LowercaseLetter },
    { 1000, 1000, UnicodeCategory_UppercaseLetter },
    { 1001, 1001, UnicodeCategory_LowercaseLetter },
    { 1002, 1002, UnicodeCategory_UppercaseLetter },
    { 1003, 1003, UnicodeCategory_LowercaseLetter },
    { 1004, 1004, UnicodeCategory_UppercaseLetter },
    { 1005, 1005, UnicodeCategory_LowercaseLetter },
    { 1006, 1006, UnicodeCategory_UppercaseLetter },
    { 1007, 1011, UnicodeCategory_LowercaseLetter },
    { 1012, 1012, UnicodeCategory_UppercaseLetter },
    { 1013, 1013, UnicodeCategory_LowercaseLetter },
    { 1014, 1014, UnicodeCategory_MathName },
    { 1015, 1015, UnicodeCategory_UppercaseLetter },
    { 1016, 1016, UnicodeCategory_LowercaseLetter },
    { 1017, 1018, UnicodeCategory_UppercaseLetter },
    { 1019, 1019, UnicodeCategory_LowercaseLetter },
    { 1024, 1071, UnicodeCategory_UppercaseLetter },
    { 1072, 1119, UnicodeCategory_LowercaseLetter },
    { 1120, 1120, UnicodeCategory_UppercaseLetter },
    { 1121, 1121, UnicodeCategory_LowercaseLetter },
    { 1122, 1122, UnicodeCategory_UppercaseLetter },
    { 1123, 1123, UnicodeCategory_LowercaseLetter },
    { 1124, 1124, UnicodeCategory_UppercaseLetter },
    { 1125, 1125, UnicodeCategory_LowercaseLetter },
    { 1126, 1126, UnicodeCategory_UppercaseLetter },
    { 1127, 1127, UnicodeCategory_LowercaseLetter },
    { 1128, 1128, UnicodeCategory_UppercaseLetter },
    { 1129, 1129, UnicodeCategory_LowercaseLetter },
    { 1130, 1130, UnicodeCategory_UppercaseLetter },
    { 1131, 1131, UnicodeCategory_LowercaseLetter },
    { 1132, 1132, UnicodeCategory_UppercaseLetter },
    { 1133, 1133, UnicodeCategory_LowercaseLetter },
    { 1134, 1134, UnicodeCategory_UppercaseLetter },
    { 1135, 1135, UnicodeCategory_LowercaseLetter },
    { 1136, 1136, UnicodeCategory_UppercaseLetter },
    { 1137, 1137, UnicodeCategory_LowercaseLetter },
    { 1138, 1138, UnicodeCategory_UppercaseLetter },
    { 1139, 1139, UnicodeCategory_LowercaseLetter },
    { 1140, 1140, UnicodeCategory_UppercaseLetter },
    { 1141, 1141, UnicodeCategory_LowercaseLetter },
    { 1142, 1142, UnicodeCategory_UppercaseLetter },
    { 1143, 1143, UnicodeCategory_LowercaseLetter },
    { 1144, 1144, UnicodeCategory_UppercaseLetter },
    { 1145, 1145, UnicodeCategory_LowercaseLetter },
    { 1146, 1146, UnicodeCategory_UppercaseLetter },
    { 1147, 1147, UnicodeCategory_LowercaseLetter },
    { 1148, 1148, UnicodeCategory_UppercaseLetter },
    { 1149, 1149, UnicodeCategory_LowercaseLetter },
    { 1150, 1150, UnicodeCategory_UppercaseLetter },
    { 1151, 1151, UnicodeCategory_LowercaseLetter },
    { 1152, 1152, UnicodeCategory_UppercaseLetter },
    { 1153, 1153, UnicodeCategory_LowercaseLetter },
    { 1154, 1154, UnicodeCategory_OtherName },
    { 1155, 1158, UnicodeCategory_NonSpacingMark },
    { 1160, 1161, UnicodeCategory_EnclosingMark },
    { 1162, 1162, UnicodeCategory_UppercaseLetter },
    { 1163, 1163, UnicodeCategory_LowercaseLetter },
    { 1164, 1164, UnicodeCategory_UppercaseLetter },
    { 1165, 1165, UnicodeCategory_LowercaseLetter },
    { 1166, 1166, UnicodeCategory_UppercaseLetter },
    { 1167, 1167, UnicodeCategory_LowercaseLetter },
    { 1168, 1168, UnicodeCategory_UppercaseLetter },
    { 1169, 1169, UnicodeCategory_LowercaseLetter },
    { 1170, 1170, UnicodeCategory_UppercaseLetter },
    { 1171, 1171, UnicodeCategory_LowercaseLetter },
    { 1172, 1172, UnicodeCategory_UppercaseLetter },
    { 1173, 1173, UnicodeCategory_LowercaseLetter },
    { 1174, 1174, UnicodeCategory_UppercaseLetter },
    { 1175, 1175, UnicodeCategory_LowercaseLetter },
    { 1176, 1176, UnicodeCategory_UppercaseLetter },
    { 1177, 1177, UnicodeCategory_LowercaseLetter },
    { 1178, 1178, UnicodeCategory_UppercaseLetter },
    { 1179, 1179, UnicodeCategory_LowercaseLetter },
    { 1180, 1180, UnicodeCategory_UppercaseLetter },
    { 1181, 1181, UnicodeCategory_LowercaseLetter },
    { 1182, 1182, UnicodeCategory_UppercaseLetter },
    { 1183, 1183, UnicodeCategory_LowercaseLetter },
    { 1184, 1184, UnicodeCategory_UppercaseLetter },
    { 1185, 1185, UnicodeCategory_LowercaseLetter },
    { 1186, 1186, UnicodeCategory_UppercaseLetter },
    { 1187, 1187, UnicodeCategory_LowercaseLetter },
    { 1188, 1188, UnicodeCategory_UppercaseLetter },
    { 1189, 1189, UnicodeCategory_LowercaseLetter },
    { 1190, 1190, UnicodeCategory_UppercaseLetter },
    { 1191, 1191, UnicodeCategory_LowercaseLetter },
    { 1192, 1192, UnicodeCategory_UppercaseLetter },
    { 1193, 1193, UnicodeCategory_LowercaseLetter },
    { 1194, 1194, UnicodeCategory_UppercaseLetter },
    { 1195, 1195, UnicodeCategory_LowercaseLetter },
    { 1196, 1196, UnicodeCategory_UppercaseLetter },
    { 1197, 1197, UnicodeCategory_LowercaseLetter },
    { 1198, 1198, UnicodeCategory_UppercaseLetter },
    { 1199, 1199, UnicodeCategory_LowercaseLetter },
    { 1200, 1200, UnicodeCategory_UppercaseLetter },
    { 1201, 1201, UnicodeCategory_LowercaseLetter },
    { 1202, 1202, UnicodeCategory_UppercaseLetter },
    { 1203, 1203, UnicodeCategory_LowercaseLetter },
    { 1204, 1204, UnicodeCategory_UppercaseLetter },
    { 1205, 1205, UnicodeCategory_LowercaseLetter },
    { 1206, 1206, UnicodeCategory_UppercaseLetter },
    { 1207, 1207, UnicodeCategory_LowercaseLetter },
    { 1208, 1208, UnicodeCategory_UppercaseLetter },
    { 1209, 1209, UnicodeCategory_LowercaseLetter },
    { 1210, 1210, UnicodeCategory_UppercaseLetter },
    { 1211, 1211, UnicodeCategory_LowercaseLetter },
    { 1212, 1212, UnicodeCategory_UppercaseLetter },
    { 1213, 1213, UnicodeCategory_LowercaseLetter },
    { 1214, 1214, UnicodeCategory_UppercaseLetter },
    { 1215, 1215, UnicodeCategory_LowercaseLetter },
    { 1216, 1217, UnicodeCategory_UppercaseLetter },
    { 1218, 1218, UnicodeCategory_LowercaseLetter },
    { 1219, 1219, UnicodeCategory_UppercaseLetter },
    { 1220, 1220, UnicodeCategory_LowercaseLetter },
    { 1221, 1221, UnicodeCategory_UppercaseLetter },
    { 1222, 1222, UnicodeCategory_LowercaseLetter },
    { 1223, 1223, UnicodeCategory_UppercaseLetter },
    { 1224, 1224, UnicodeCategory_LowercaseLetter },
    { 1225, 1225, UnicodeCategory_UppercaseLetter },
    { 1226, 1226, UnicodeCategory_LowercaseLetter },
    { 1227, 1227, UnicodeCategory_UppercaseLetter },
    { 1228, 1228, UnicodeCategory_LowercaseLetter },
    { 1229, 1229, UnicodeCategory_UppercaseLetter },
    { 1230, 1230, UnicodeCategory_LowercaseLetter },
    { 1232, 1232, UnicodeCategory_UppercaseLetter },
    { 1233, 1233, UnicodeCategory_LowercaseLetter },
    { 1234, 1234, UnicodeCategory_UppercaseLetter },
    { 1235, 1235, UnicodeCategory_LowercaseLetter },
    { 1236, 1236, UnicodeCategory_UppercaseLetter },
    { 1237, 1237, UnicodeCategory_LowercaseLetter },
    { 1238, 1238, UnicodeCategory_UppercaseLetter },
    { 1239, 1239, UnicodeCategory_LowercaseLetter },
    { 1240, 1240, UnicodeCategory_UppercaseLetter },
    { 1241, 1241, UnicodeCategory_LowercaseLetter },
    { 1242, 1242, UnicodeCategory_UppercaseLetter },
    { 1243, 1243, UnicodeCategory_LowercaseLetter },
    { 1244, 1244, UnicodeCategory_UppercaseLetter },
    { 1245, 1245, UnicodeCategory_LowercaseLetter },
    { 1246, 1246, UnicodeCategory_UppercaseLetter },
    { 1247, 1247, UnicodeCategory_LowercaseLetter },
    { 1248, 1248, UnicodeCategory_UppercaseLetter },
    { 1249, 1249, UnicodeCategory_LowercaseLetter },
    { 1250, 1250, UnicodeCategory_UppercaseLetter },
    { 1251, 1251, UnicodeCategory_LowercaseLetter },
    { 1252, 1252, UnicodeCategory_UppercaseLetter },
    { 1253, 1253, UnicodeCategory_LowercaseLetter },
    { 1254, 1254, UnicodeCategory_UppercaseLetter },
    { 1255, 1255, UnicodeCategory_LowercaseLetter },
    { 1256, 1256, UnicodeCategory_UppercaseLetter },
    { 1257, 1257, UnicodeCategory_LowercaseLetter },
    { 1258, 1258, UnicodeCategory_UppercaseLetter },
    { 1259, 1259, UnicodeCategory_LowercaseLetter },
    { 1260, 1260, UnicodeCategory_UppercaseLetter },
    { 1261, 1261, UnicodeCategory_LowercaseLetter },
    { 1262, 1262, UnicodeCategory_UppercaseLetter },
    { 1263, 1263, UnicodeCategory_LowercaseLetter },
    { 1264, 1264, UnicodeCategory_UppercaseLetter },
    { 1265, 1265, UnicodeCategory_LowercaseLetter },
    { 1266, 1266, UnicodeCategory_UppercaseLetter },
    { 1267, 1267, UnicodeCategory_LowercaseLetter },
    { 1268, 1268, UnicodeCategory_UppercaseLetter },
    { 1269, 1269, UnicodeCategory_LowercaseLetter },
    { 1272, 1272, UnicodeCategory_UppercaseLetter },
    { 1273, 1273, UnicodeCategory_LowercaseLetter },
    { 1280, 1280, UnicodeCategory_UppercaseLetter },
    { 1281, 1281, UnicodeCategory_LowercaseLetter },
    { 1282, 1282, UnicodeCategory_UppercaseLetter },
    { 1283, 1283, UnicodeCategory_LowercaseLetter },
    { 1284, 1284, UnicodeCategory_UppercaseLetter },
    { 1285, 1285, UnicodeCategory_LowercaseLetter },
    { 1286, 1286, UnicodeCategory_UppercaseLetter },
    { 1287, 1287, UnicodeCategory_LowercaseLetter },
    { 1288, 1288, UnicodeCategory_UppercaseLetter },
    { 1289, 1289, UnicodeCategory_LowercaseLetter },
    { 1290, 1290, UnicodeCategory_UppercaseLetter },
    { 1291, 1291, UnicodeCategory_LowercaseLetter },
    { 1292, 1292, UnicodeCategory_UppercaseLetter },
    { 1293, 1293, UnicodeCategory_LowercaseLetter },
    { 1294, 1294, UnicodeCategory_UppercaseLetter },
    { 1295, 1295, UnicodeCategory_LowercaseLetter },
    { 1329, 1366, UnicodeCategory_UppercaseLetter },
    { 1369, 1369, UnicodeCategory_ModifierLetter },
    { 1370, 1375,  UnicodeCategory_OtherPunctuation },
    { 1377, 1415, UnicodeCategory_LowercaseLetter },
    { 1417, 1417,  UnicodeCategory_OtherPunctuation },
    { 1418, 1418, UnicodeCategory_DashPunctuation },
    { 1425, 1441, UnicodeCategory_NonSpacingMark },
    { 1443, 1465, UnicodeCategory_NonSpacingMark },
    { 1467, 1469, UnicodeCategory_NonSpacingMark },
    { 1470, 1470,  UnicodeCategory_OtherPunctuation },
    { 1471, 1471, UnicodeCategory_NonSpacingMark },
    { 1472, 1472,  UnicodeCategory_OtherPunctuation },
    { 1473, 1474, UnicodeCategory_NonSpacingMark },
    { 1475, 1475,  UnicodeCategory_OtherPunctuation },
    { 1476, 1476, UnicodeCategory_NonSpacingMark },
    { 1488, 1514, UnicodeCategory_OtherLetter },
    { 1520, 1522, UnicodeCategory_OtherLetter },
    { 1523, 1524,  UnicodeCategory_OtherPunctuation },
    { 1536, 1539, UnicodeCategory_OtherFormat },
    { 1548, 1549,  UnicodeCategory_OtherPunctuation },
    { 1550, 1551, UnicodeCategory_OtherName },
    { 1552, 1557, UnicodeCategory_NonSpacingMark },
    { 1563, 1563,  UnicodeCategory_OtherPunctuation },
    { 1567, 1567,  UnicodeCategory_OtherPunctuation },
    { 1569, 1594, UnicodeCategory_OtherLetter },
    { 1600, 1600, UnicodeCategory_ModifierLetter },
    { 1601, 1610, UnicodeCategory_OtherLetter },
    { 1611, 1624, UnicodeCategory_NonSpacingMark },
    { 1632, 1641, UnicodeCategory_DecimalDigitNumber },
    { 1642, 1645,  UnicodeCategory_OtherPunctuation },
    { 1646, 1647, UnicodeCategory_OtherLetter },
    { 1648, 1648, UnicodeCategory_NonSpacingMark },
    { 1649, 1747, UnicodeCategory_OtherLetter },
    { 1748, 1748,  UnicodeCategory_OtherPunctuation },
    { 1749, 1749, UnicodeCategory_OtherLetter },
    { 1750, 1756, UnicodeCategory_NonSpacingMark },
    { 1757, 1757, UnicodeCategory_OtherFormat },
    { 1758, 1758, UnicodeCategory_EnclosingMark },
    { 1759, 1764, UnicodeCategory_NonSpacingMark },
    { 1765, 1766, UnicodeCategory_ModifierLetter },
    { 1767, 1768, UnicodeCategory_NonSpacingMark },
    { 1769, 1769, UnicodeCategory_OtherName },
    { 1770, 1773, UnicodeCategory_NonSpacingMark },
    { 1774, 1775, UnicodeCategory_OtherLetter },
    { 1776, 1785, UnicodeCategory_DecimalDigitNumber },
    { 1786, 1788, UnicodeCategory_OtherLetter },
    { 1789, 1790, UnicodeCategory_OtherName },
    { 1791, 1791, UnicodeCategory_OtherLetter },
    { 1792, 1805,  UnicodeCategory_OtherPunctuation },
    { 1807, 1807, UnicodeCategory_OtherFormat },
    { 1808, 1808, UnicodeCategory_OtherLetter },
    { 1809, 1809, UnicodeCategory_NonSpacingMark },
    { 1810, 1839, UnicodeCategory_OtherLetter },
    { 1840, 1866, UnicodeCategory_NonSpacingMark },
    { 1869, 1871, UnicodeCategory_OtherLetter },
    { 1920, 1957, UnicodeCategory_OtherLetter },
    { 1958, 1968, UnicodeCategory_NonSpacingMark },
    { 1969, 1969, UnicodeCategory_OtherLetter },
    { 2305, 2306, UnicodeCategory_NonSpacingMark },
    { 2307, 2307, UnicodeCategory_CombiningSpacingMark },
    { 2308, 2361, UnicodeCategory_OtherLetter },
    { 2364, 2364, UnicodeCategory_NonSpacingMark },
    { 2365, 2365, UnicodeCategory_OtherLetter },
    { 2366, 2368, UnicodeCategory_CombiningSpacingMark },
    { 2369, 2376, UnicodeCategory_NonSpacingMark },
    { 2377, 2380, UnicodeCategory_CombiningSpacingMark },
    { 2381, 2381, UnicodeCategory_NonSpacingMark },
    { 2384, 2384, UnicodeCategory_OtherLetter },
    { 2385, 2388, UnicodeCategory_NonSpacingMark },
    { 2392, 2401, UnicodeCategory_OtherLetter },
    { 2402, 2403, UnicodeCategory_NonSpacingMark },
    { 2404, 2405,  UnicodeCategory_OtherPunctuation },
    { 2406, 2415, UnicodeCategory_DecimalDigitNumber },
    { 2416, 2416,  UnicodeCategory_OtherPunctuation },
    { 2433, 2433, UnicodeCategory_NonSpacingMark },
    { 2434, 2435, UnicodeCategory_CombiningSpacingMark },
    { 2437, 2444, UnicodeCategory_OtherLetter },
    { 2447, 2448, UnicodeCategory_OtherLetter },
    { 2451, 2472, UnicodeCategory_OtherLetter },
    { 2474, 2480, UnicodeCategory_OtherLetter },
    { 2482, 2482, UnicodeCategory_OtherLetter },
    { 2486, 2489, UnicodeCategory_OtherLetter },
    { 2492, 2492, UnicodeCategory_NonSpacingMark },
    { 2493, 2493, UnicodeCategory_OtherLetter },
    { 2494, 2496, UnicodeCategory_CombiningSpacingMark },
    { 2497, 2500, UnicodeCategory_NonSpacingMark },
    { 2503, 2504, UnicodeCategory_CombiningSpacingMark },
    { 2507, 2508, UnicodeCategory_CombiningSpacingMark },
    { 2509, 2509, UnicodeCategory_NonSpacingMark },
    { 2519, 2519, UnicodeCategory_CombiningSpacingMark },
    { 2524, 2525, UnicodeCategory_OtherLetter },
    { 2527, 2529, UnicodeCategory_OtherLetter },
    { 2530, 2531, UnicodeCategory_NonSpacingMark },
    { 2534, 2543, UnicodeCategory_DecimalDigitNumber },
    { 2544, 2545, UnicodeCategory_OtherLetter },
    { 2546, 2547, UnicodeCategory_CurrencyName },
    { 2548, 2553, UnicodeCategory_OtherNumber },
    { 2554, 2554, UnicodeCategory_OtherName },
    { 2561, 2562, UnicodeCategory_NonSpacingMark },
    { 2563, 2563, UnicodeCategory_CombiningSpacingMark },
    { 2565, 2570, UnicodeCategory_OtherLetter },
    { 2575, 2576, UnicodeCategory_OtherLetter },
    { 2579, 2600, UnicodeCategory_OtherLetter },
    { 2602, 2608, UnicodeCategory_OtherLetter },
    { 2610, 2611, UnicodeCategory_OtherLetter },
    { 2613, 2614, UnicodeCategory_OtherLetter },
    { 2616, 2617, UnicodeCategory_OtherLetter },
    { 2620, 2620, UnicodeCategory_NonSpacingMark },
    { 2622, 2624, UnicodeCategory_CombiningSpacingMark },
    { 2625, 2626, UnicodeCategory_NonSpacingMark },
    { 2631, 2632, UnicodeCategory_NonSpacingMark },
    { 2635, 2637, UnicodeCategory_NonSpacingMark },
    { 2649, 2652, UnicodeCategory_OtherLetter },
    { 2654, 2654, UnicodeCategory_OtherLetter },
    { 2662, 2671, UnicodeCategory_DecimalDigitNumber },
    { 2672, 2673, UnicodeCategory_NonSpacingMark },
    { 2674, 2676, UnicodeCategory_OtherLetter },
    { 2689, 2690, UnicodeCategory_NonSpacingMark },
    { 2691, 2691, UnicodeCategory_CombiningSpacingMark },
    { 2693, 2701, UnicodeCategory_OtherLetter },
    { 2703, 2705, UnicodeCategory_OtherLetter },
    { 2707, 2728, UnicodeCategory_OtherLetter },
    { 2730, 2736, UnicodeCategory_OtherLetter },
    { 2738, 2739, UnicodeCategory_OtherLetter },
    { 2741, 2745, UnicodeCategory_OtherLetter },
    { 2748, 2748, UnicodeCategory_NonSpacingMark },
    { 2749, 2749, UnicodeCategory_OtherLetter },
    { 2750, 2752, UnicodeCategory_CombiningSpacingMark },
    { 2753, 2757, UnicodeCategory_NonSpacingMark },
    { 2759, 2760, UnicodeCategory_NonSpacingMark },
    { 2761, 2761, UnicodeCategory_CombiningSpacingMark },
    { 2763, 2764, UnicodeCategory_CombiningSpacingMark },
    { 2765, 2765, UnicodeCategory_NonSpacingMark },
    { 2768, 2768, UnicodeCategory_OtherLetter },
    { 2784, 2785, UnicodeCategory_OtherLetter },
    { 2786, 2787, UnicodeCategory_NonSpacingMark },
    { 2790, 2799, UnicodeCategory_DecimalDigitNumber },
    { 2801, 2801, UnicodeCategory_CurrencyName },
    { 2817, 2817, UnicodeCategory_NonSpacingMark },
    { 2818, 2819, UnicodeCategory_CombiningSpacingMark },
    { 2821, 2828, UnicodeCategory_OtherLetter },
    { 2831, 2832, UnicodeCategory_OtherLetter },
    { 2835, 2856, UnicodeCategory_OtherLetter },
    { 2858, 2864, UnicodeCategory_OtherLetter },
    { 2866, 2867, UnicodeCategory_OtherLetter },
    { 2869, 2873, UnicodeCategory_OtherLetter },
    { 2876, 2876, UnicodeCategory_NonSpacingMark },
    { 2877, 2877, UnicodeCategory_OtherLetter },
    { 2878, 2878, UnicodeCategory_CombiningSpacingMark },
    { 2879, 2879, UnicodeCategory_NonSpacingMark },
    { 2880, 2880, UnicodeCategory_CombiningSpacingMark },
    { 2881, 2883, UnicodeCategory_NonSpacingMark },
    { 2887, 2888, UnicodeCategory_CombiningSpacingMark },
    { 2891, 2892, UnicodeCategory_CombiningSpacingMark },
    { 2893, 2893, UnicodeCategory_NonSpacingMark },
    { 2902, 2902, UnicodeCategory_NonSpacingMark },
    { 2903, 2903, UnicodeCategory_CombiningSpacingMark },
    { 2908, 2909, UnicodeCategory_OtherLetter },
    { 2911, 2913, UnicodeCategory_OtherLetter },
    { 2918, 2927, UnicodeCategory_DecimalDigitNumber },
    { 2928, 2928, UnicodeCategory_OtherName },
    { 2929, 2929, UnicodeCategory_OtherLetter },
    { 2946, 2946, UnicodeCategory_NonSpacingMark },
    { 2947, 2947, UnicodeCategory_OtherLetter },
    { 2949, 2954, UnicodeCategory_OtherLetter },
    { 2958, 2960, UnicodeCategory_OtherLetter },
    { 2962, 2965, UnicodeCategory_OtherLetter },
    { 2969, 2970, UnicodeCategory_OtherLetter },
    { 2972, 2972, UnicodeCategory_OtherLetter },
    { 2974, 2975, UnicodeCategory_OtherLetter },
    { 2979, 2980, UnicodeCategory_OtherLetter },
    { 2984, 2986, UnicodeCategory_OtherLetter },
    { 2990, 2997, UnicodeCategory_OtherLetter },
    { 2999, 3001, UnicodeCategory_OtherLetter },
    { 3006, 3007, UnicodeCategory_CombiningSpacingMark },
    { 3008, 3008, UnicodeCategory_NonSpacingMark },
    { 3009, 3010, UnicodeCategory_CombiningSpacingMark },
    { 3014, 3016, UnicodeCategory_CombiningSpacingMark },
    { 3018, 3020, UnicodeCategory_CombiningSpacingMark },
    { 3021, 3021, UnicodeCategory_NonSpacingMark },
    { 3031, 3031, UnicodeCategory_CombiningSpacingMark },
    { 3047, 3055, UnicodeCategory_DecimalDigitNumber },
    { 3056, 3058, UnicodeCategory_OtherNumber },
    { 3059, 3064, UnicodeCategory_OtherName },
    { 3065, 3065, UnicodeCategory_CurrencyName },
    { 3066, 3066, UnicodeCategory_OtherName },
    { 3073, 3075, UnicodeCategory_CombiningSpacingMark },
    { 3077, 3084, UnicodeCategory_OtherLetter },
    { 3086, 3088, UnicodeCategory_OtherLetter },
    { 3090, 3112, UnicodeCategory_OtherLetter },
    { 3114, 3123, UnicodeCategory_OtherLetter },
    { 3125, 3129, UnicodeCategory_OtherLetter },
    { 3134, 3136, UnicodeCategory_NonSpacingMark },
    { 3137, 3140, UnicodeCategory_CombiningSpacingMark },
    { 3142, 3144, UnicodeCategory_NonSpacingMark },
    { 3146, 3149, UnicodeCategory_NonSpacingMark },
    { 3157, 3158, UnicodeCategory_NonSpacingMark },
    { 3168, 3169, UnicodeCategory_OtherLetter },
    { 3174, 3183, UnicodeCategory_DecimalDigitNumber },
    { 3202, 3203, UnicodeCategory_CombiningSpacingMark },
    { 3205, 3212, UnicodeCategory_OtherLetter },
    { 3214, 3216, UnicodeCategory_OtherLetter },
    { 3218, 3240, UnicodeCategory_OtherLetter },
    { 3242, 3251, UnicodeCategory_OtherLetter },
    { 3253, 3257, UnicodeCategory_OtherLetter },
    { 3260, 3260, UnicodeCategory_NonSpacingMark },
    { 3261, 3261, UnicodeCategory_OtherLetter },
    { 3262, 3262, UnicodeCategory_CombiningSpacingMark },
    { 3263, 3263, UnicodeCategory_NonSpacingMark },
    { 3264, 3268, UnicodeCategory_CombiningSpacingMark },
    { 3270, 3270, UnicodeCategory_NonSpacingMark },
    { 3271, 3272, UnicodeCategory_CombiningSpacingMark },
    { 3274, 3275, UnicodeCategory_CombiningSpacingMark },
    { 3276, 3277, UnicodeCategory_NonSpacingMark },
    { 3285, 3286, UnicodeCategory_CombiningSpacingMark },
    { 3294, 3294, UnicodeCategory_OtherLetter },
    { 3296, 3297, UnicodeCategory_OtherLetter },
    { 3302, 3311, UnicodeCategory_DecimalDigitNumber },
    { 3330, 3331, UnicodeCategory_CombiningSpacingMark },
    { 3333, 3340, UnicodeCategory_OtherLetter },
    { 3342, 3344, UnicodeCategory_OtherLetter },
    { 3346, 3368, UnicodeCategory_OtherLetter },
    { 3370, 3385, UnicodeCategory_OtherLetter },
    { 3390, 3392, UnicodeCategory_CombiningSpacingMark },
    { 3393, 3395, UnicodeCategory_NonSpacingMark },
    { 3398, 3400, UnicodeCategory_CombiningSpacingMark },
    { 3402, 3404, UnicodeCategory_CombiningSpacingMark },
    { 3405, 3405, UnicodeCategory_NonSpacingMark },
    { 3415, 3415, UnicodeCategory_CombiningSpacingMark },
    { 3424, 3425, UnicodeCategory_OtherLetter },
    { 3430, 3439, UnicodeCategory_DecimalDigitNumber },
    { 3458, 3459, UnicodeCategory_CombiningSpacingMark },
    { 3461, 3478, UnicodeCategory_OtherLetter },
    { 3482, 3505, UnicodeCategory_OtherLetter },
    { 3507, 3515, UnicodeCategory_OtherLetter },
    { 3517, 3517, UnicodeCategory_OtherLetter },
    { 3520, 3526, UnicodeCategory_OtherLetter },
    { 3530, 3530, UnicodeCategory_NonSpacingMark },
    { 3535, 3537, UnicodeCategory_CombiningSpacingMark },
    { 3538, 3540, UnicodeCategory_NonSpacingMark },
    { 3542, 3542, UnicodeCategory_NonSpacingMark },
    { 3544, 3551, UnicodeCategory_CombiningSpacingMark },
    { 3570, 3571, UnicodeCategory_CombiningSpacingMark },
    { 3572, 3572,  UnicodeCategory_OtherPunctuation },
    { 3585, 3632, UnicodeCategory_OtherLetter },
    { 3633, 3633, UnicodeCategory_NonSpacingMark },
    { 3634, 3635, UnicodeCategory_OtherLetter },
    { 3636, 3642, UnicodeCategory_NonSpacingMark },
    { 3647, 3647, UnicodeCategory_CurrencyName },
    { 3648, 3653, UnicodeCategory_OtherLetter },
    { 3654, 3654, UnicodeCategory_ModifierLetter },
    { 3655, 3662, UnicodeCategory_NonSpacingMark },
    { 3663, 3663,  UnicodeCategory_OtherPunctuation },
    { 3664, 3673, UnicodeCategory_DecimalDigitNumber },
    { 3674, 3675,  UnicodeCategory_OtherPunctuation },
    { 3713, 3714, UnicodeCategory_OtherLetter },
    { 3716, 3716, UnicodeCategory_OtherLetter },
    { 3719, 3720, UnicodeCategory_OtherLetter },
    { 3722, 3722, UnicodeCategory_OtherLetter },
    { 3725, 3725, UnicodeCategory_OtherLetter },
    { 3732, 3735, UnicodeCategory_OtherLetter },
    { 3737, 3743, UnicodeCategory_OtherLetter },
    { 3745, 3747, UnicodeCategory_OtherLetter },
    { 3749, 3749, UnicodeCategory_OtherLetter },
    { 3751, 3751, UnicodeCategory_OtherLetter },
    { 3754, 3755, UnicodeCategory_OtherLetter },
    { 3757, 3760, UnicodeCategory_OtherLetter },
    { 3761, 3761, UnicodeCategory_NonSpacingMark },
    { 3762, 3763, UnicodeCategory_OtherLetter },
    { 3764, 3769, UnicodeCategory_NonSpacingMark },
    { 3771, 3772, UnicodeCategory_NonSpacingMark },
    { 3773, 3773, UnicodeCategory_OtherLetter },
    { 3776, 3780, UnicodeCategory_OtherLetter },
    { 3782, 3782, UnicodeCategory_ModifierLetter },
    { 3784, 3789, UnicodeCategory_NonSpacingMark },
    { 3792, 3801, UnicodeCategory_DecimalDigitNumber },
    { 3804, 3805, UnicodeCategory_OtherLetter },
    { 3840, 3840, UnicodeCategory_OtherLetter },
    { 3841, 3843, UnicodeCategory_OtherName },
    { 3844, 3858,  UnicodeCategory_OtherPunctuation },
    { 3859, 3863, UnicodeCategory_OtherName },
    { 3864, 3865, UnicodeCategory_NonSpacingMark },
    { 3866, 3871, UnicodeCategory_OtherName },
    { 3872, 3881, UnicodeCategory_DecimalDigitNumber },
    { 3882, 3891, UnicodeCategory_OtherNumber },
    { 3892, 3892, UnicodeCategory_OtherName },
    { 3893, 3893, UnicodeCategory_NonSpacingMark },
    { 3894, 3894, UnicodeCategory_OtherName },
    { 3895, 3895, UnicodeCategory_NonSpacingMark },
    { 3896, 3896, UnicodeCategory_OtherName },
    { 3897, 3897, UnicodeCategory_NonSpacingMark },
    { 3898, 3898, UnicodeCategory_OpenPunctuation },
    { 3899, 3899, UnicodeCategory_ClosePunctuation },
    { 3900, 3900, UnicodeCategory_OpenPunctuation },
    { 3901, 3901, UnicodeCategory_ClosePunctuation },
    { 3902, 3903, UnicodeCategory_CombiningSpacingMark },
    { 3904, 3911, UnicodeCategory_OtherLetter },
    { 3913, 3946, UnicodeCategory_OtherLetter },
    { 3953, 3966, UnicodeCategory_NonSpacingMark },
    { 3967, 3967, UnicodeCategory_CombiningSpacingMark },
    { 3968, 3972, UnicodeCategory_NonSpacingMark },
    { 3973, 3973,  UnicodeCategory_OtherPunctuation },
    { 3974, 3975, UnicodeCategory_NonSpacingMark },
    { 3976, 3979, UnicodeCategory_OtherLetter },
    { 3984, 3991, UnicodeCategory_NonSpacingMark },
    { 3993, 4028, UnicodeCategory_NonSpacingMark },
    { 4030, 4037, UnicodeCategory_OtherName },
    { 4038, 4038, UnicodeCategory_NonSpacingMark },
    { 4039, 4044, UnicodeCategory_OtherName },
    { 4047, 4047, UnicodeCategory_OtherName },
    { 4096, 4129, UnicodeCategory_OtherLetter },
    { 4131, 4135, UnicodeCategory_OtherLetter },
    { 4137, 4138, UnicodeCategory_OtherLetter },
    { 4140, 4140, UnicodeCategory_CombiningSpacingMark },
    { 4141, 4144, UnicodeCategory_NonSpacingMark },
    { 4145, 4145, UnicodeCategory_CombiningSpacingMark },
    { 4146, 4146, UnicodeCategory_NonSpacingMark },
    { 4150, 4151, UnicodeCategory_NonSpacingMark },
    { 4152, 4152, UnicodeCategory_CombiningSpacingMark },
    { 4153, 4153, UnicodeCategory_NonSpacingMark },
    { 4160, 4169, UnicodeCategory_DecimalDigitNumber },
    { 4170, 4175,  UnicodeCategory_OtherPunctuation },
    { 4176, 4181, UnicodeCategory_OtherLetter },
    { 4182, 4183, UnicodeCategory_CombiningSpacingMark },
    { 4184, 4185, UnicodeCategory_NonSpacingMark },
    { 4256, 4293, UnicodeCategory_UppercaseLetter },
    { 4304, 4344, UnicodeCategory_OtherLetter },
    { 4347, 4347,  UnicodeCategory_OtherPunctuation },
    { 4352, 4441, UnicodeCategory_OtherLetter },
    { 4447, 4514, UnicodeCategory_OtherLetter },
    { 4520, 4601, UnicodeCategory_OtherLetter },
    { 4608, 4614, UnicodeCategory_OtherLetter },
    { 4616, 4678, UnicodeCategory_OtherLetter },
    { 4680, 4680, UnicodeCategory_OtherLetter },
    { 4682, 4685, UnicodeCategory_OtherLetter },
    { 4688, 4694, UnicodeCategory_OtherLetter },
    { 4696, 4696, UnicodeCategory_OtherLetter },
    { 4698, 4701, UnicodeCategory_OtherLetter },
    { 4704, 4742, UnicodeCategory_OtherLetter },
    { 4744, 4744, UnicodeCategory_OtherLetter },
    { 4746, 4749, UnicodeCategory_OtherLetter },
    { 4752, 4782, UnicodeCategory_OtherLetter },
    { 4784, 4784, UnicodeCategory_OtherLetter },
    { 4786, 4789, UnicodeCategory_OtherLetter },
    { 4792, 4798, UnicodeCategory_OtherLetter },
    { 4800, 4800, UnicodeCategory_OtherLetter },
    { 4802, 4805, UnicodeCategory_OtherLetter },
    { 4808, 4814, UnicodeCategory_OtherLetter },
    { 4816, 4822, UnicodeCategory_OtherLetter },
    { 4824, 4846, UnicodeCategory_OtherLetter },
    { 4848, 4878, UnicodeCategory_OtherLetter },
    { 4880, 4880, UnicodeCategory_OtherLetter },
    { 4882, 4885, UnicodeCategory_OtherLetter },
    { 4888, 4894, UnicodeCategory_OtherLetter },
    { 4896, 4934, UnicodeCategory_OtherLetter },
    { 4936, 4954, UnicodeCategory_OtherLetter },
    { 4961, 4968,  UnicodeCategory_OtherPunctuation },
    { 4969, 4977, UnicodeCategory_DecimalDigitNumber },
    { 4978, 4988, UnicodeCategory_OtherNumber },
    { 5024, 5108, UnicodeCategory_OtherLetter },
    { 5121, 5740, UnicodeCategory_OtherLetter },
    { 5741, 5742,  UnicodeCategory_OtherPunctuation },
    { 5743, 5750, UnicodeCategory_OtherLetter },
    { 5760, 5760, UnicodeCategory_SpaceSeparator },
    { 5761, 5786, UnicodeCategory_OtherLetter },
    { 5787, 5787, UnicodeCategory_OpenPunctuation },
    { 5788, 5788, UnicodeCategory_ClosePunctuation },
    { 5792, 5866, UnicodeCategory_OtherLetter },
    { 5867, 5869,  UnicodeCategory_OtherPunctuation },
    { 5870, 5872, UnicodeCategory_LetterNumber },
    { 5888, 5900, UnicodeCategory_OtherLetter },
    { 5902, 5905, UnicodeCategory_OtherLetter },
    { 5906, 5908, UnicodeCategory_NonSpacingMark },
    { 5920, 5937, UnicodeCategory_OtherLetter },
    { 5938, 5940, UnicodeCategory_NonSpacingMark },
    { 5941, 5942,  UnicodeCategory_OtherPunctuation },
    { 5952, 5969, UnicodeCategory_OtherLetter },
    { 5970, 5971, UnicodeCategory_NonSpacingMark },
    { 5984, 5996, UnicodeCategory_OtherLetter },
    { 5998, 6000, UnicodeCategory_OtherLetter },
    { 6002, 6003, UnicodeCategory_NonSpacingMark },
    { 6016, 6067, UnicodeCategory_OtherLetter },
    { 6068, 6069, UnicodeCategory_OtherFormat },
    { 6070, 6070, UnicodeCategory_CombiningSpacingMark },
    { 6071, 6077, UnicodeCategory_NonSpacingMark },
    { 6078, 6085, UnicodeCategory_CombiningSpacingMark },
    { 6086, 6086, UnicodeCategory_NonSpacingMark },
    { 6087, 6088, UnicodeCategory_CombiningSpacingMark },
    { 6089, 6099, UnicodeCategory_NonSpacingMark },
    { 6100, 6102,  UnicodeCategory_OtherPunctuation },
    { 6103, 6103, UnicodeCategory_ModifierLetter },
    { 6104, 6106,  UnicodeCategory_OtherPunctuation },
    { 6107, 6107, UnicodeCategory_CurrencyName },
    { 6108, 6108, UnicodeCategory_OtherLetter },
    { 6109, 6109, UnicodeCategory_NonSpacingMark },
    { 6112, 6121, UnicodeCategory_DecimalDigitNumber },
    { 6128, 6137, UnicodeCategory_OtherNumber },
    { 6144, 6149,  UnicodeCategory_OtherPunctuation },
    { 6150, 6150, UnicodeCategory_DashPunctuation },
    { 6151, 6154,  UnicodeCategory_OtherPunctuation },
    { 6155, 6157, UnicodeCategory_NonSpacingMark },
    { 6158, 6158, UnicodeCategory_SpaceSeparator },
    { 6160, 6169, UnicodeCategory_DecimalDigitNumber },
    { 6176, 6210, UnicodeCategory_OtherLetter },
    { 6211, 6211, UnicodeCategory_ModifierLetter },
    { 6212, 6263, UnicodeCategory_OtherLetter },
    { 6272, 6312, UnicodeCategory_OtherLetter },
    { 6313, 6313, UnicodeCategory_NonSpacingMark },
    { 6400, 6428, UnicodeCategory_OtherLetter },
    { 6432, 6434, UnicodeCategory_NonSpacingMark },
    { 6435, 6438, UnicodeCategory_CombiningSpacingMark },
    { 6439, 6440, UnicodeCategory_NonSpacingMark },
    { 6441, 6443, UnicodeCategory_CombiningSpacingMark },
    { 6448, 6449, UnicodeCategory_CombiningSpacingMark },
    { 6450, 6450, UnicodeCategory_NonSpacingMark },
    { 6451, 6456, UnicodeCategory_CombiningSpacingMark },
    { 6457, 6459, UnicodeCategory_NonSpacingMark },
    { 6464, 6464, UnicodeCategory_OtherName },
    { 6468, 6469,  UnicodeCategory_OtherPunctuation },
    { 6470, 6479, UnicodeCategory_DecimalDigitNumber },
    { 6480, 6509, UnicodeCategory_OtherLetter },
    { 6512, 6516, UnicodeCategory_OtherLetter },
    { 6624, 6655, UnicodeCategory_OtherName },
    { 7424, 7467, UnicodeCategory_LowercaseLetter },
    { 7468, 7521, UnicodeCategory_ModifierLetter },
    { 7522, 7531, UnicodeCategory_LowercaseLetter },
    { 7680, 7680, UnicodeCategory_UppercaseLetter },
    { 7681, 7681, UnicodeCategory_LowercaseLetter },
    { 7682, 7682, UnicodeCategory_UppercaseLetter },
    { 7683, 7683, UnicodeCategory_LowercaseLetter },
    { 7684, 7684, UnicodeCategory_UppercaseLetter },
    { 7685, 7685, UnicodeCategory_LowercaseLetter },
    { 7686, 7686, UnicodeCategory_UppercaseLetter },
    { 7687, 7687, UnicodeCategory_LowercaseLetter },
    { 7688, 7688, UnicodeCategory_UppercaseLetter },
    { 7689, 7689, UnicodeCategory_LowercaseLetter },
    { 7690, 7690, UnicodeCategory_UppercaseLetter },
    { 7691, 7691, UnicodeCategory_LowercaseLetter },
    { 7692, 7692, UnicodeCategory_UppercaseLetter },
    { 7693, 7693, UnicodeCategory_LowercaseLetter },
    { 7694, 7694, UnicodeCategory_UppercaseLetter },
    { 7695, 7695, UnicodeCategory_LowercaseLetter },
    { 7696, 7696, UnicodeCategory_UppercaseLetter },
    { 7697, 7697, UnicodeCategory_LowercaseLetter },
    { 7698, 7698, UnicodeCategory_UppercaseLetter },
    { 7699, 7699, UnicodeCategory_LowercaseLetter },
    { 7700, 7700, UnicodeCategory_UppercaseLetter },
    { 7701, 7701, UnicodeCategory_LowercaseLetter },
    { 7702, 7702, UnicodeCategory_UppercaseLetter },
    { 7703, 7703, UnicodeCategory_LowercaseLetter },
    { 7704, 7704, UnicodeCategory_UppercaseLetter },
    { 7705, 7705, UnicodeCategory_LowercaseLetter },
    { 7706, 7706, UnicodeCategory_UppercaseLetter },
    { 7707, 7707, UnicodeCategory_LowercaseLetter },
    { 7708, 7708, UnicodeCategory_UppercaseLetter },
    { 7709, 7709, UnicodeCategory_LowercaseLetter },
    { 7710, 7710, UnicodeCategory_UppercaseLetter },
    { 7711, 7711, UnicodeCategory_LowercaseLetter },
    { 7712, 7712, UnicodeCategory_UppercaseLetter },
    { 7713, 7713, UnicodeCategory_LowercaseLetter },
    { 7714, 7714, UnicodeCategory_UppercaseLetter },
    { 7715, 7715, UnicodeCategory_LowercaseLetter },
    { 7716, 7716, UnicodeCategory_UppercaseLetter },
    { 7717, 7717, UnicodeCategory_LowercaseLetter },
    { 7718, 7718, UnicodeCategory_UppercaseLetter },
    { 7719, 7719, UnicodeCategory_LowercaseLetter },
    { 7720, 7720, UnicodeCategory_UppercaseLetter },
    { 7721, 7721, UnicodeCategory_LowercaseLetter },
    { 7722, 7722, UnicodeCategory_UppercaseLetter },
    { 7723, 7723, UnicodeCategory_LowercaseLetter },
    { 7724, 7724, UnicodeCategory_UppercaseLetter },
    { 7725, 7725, UnicodeCategory_LowercaseLetter },
    { 7726, 7726, UnicodeCategory_UppercaseLetter },
    { 7727, 7727, UnicodeCategory_LowercaseLetter },
    { 7728, 7728, UnicodeCategory_UppercaseLetter },
    { 7729, 7729, UnicodeCategory_LowercaseLetter },
    { 7730, 7730, UnicodeCategory_UppercaseLetter },
    { 7731, 7731, UnicodeCategory_LowercaseLetter },
    { 7732, 7732, UnicodeCategory_UppercaseLetter },
    { 7733, 7733, UnicodeCategory_LowercaseLetter },
    { 7734, 7734, UnicodeCategory_UppercaseLetter },
    { 7735, 7735, UnicodeCategory_LowercaseLetter },
    { 7736, 7736, UnicodeCategory_UppercaseLetter },
    { 7737, 7737, UnicodeCategory_LowercaseLetter },
    { 7738, 7738, UnicodeCategory_UppercaseLetter },
    { 7739, 7739, UnicodeCategory_LowercaseLetter },
    { 7740, 7740, UnicodeCategory_UppercaseLetter },
    { 7741, 7741, UnicodeCategory_LowercaseLetter },
    { 7742, 7742, UnicodeCategory_UppercaseLetter },
    { 7743, 7743, UnicodeCategory_LowercaseLetter },
    { 7744, 7744, UnicodeCategory_UppercaseLetter },
    { 7745, 7745, UnicodeCategory_LowercaseLetter },
    { 7746, 7746, UnicodeCategory_UppercaseLetter },
    { 7747, 7747, UnicodeCategory_LowercaseLetter },
    { 7748, 7748, UnicodeCategory_UppercaseLetter },
    { 7749, 7749, UnicodeCategory_LowercaseLetter },
    { 7750, 7750, UnicodeCategory_UppercaseLetter },
    { 7751, 7751, UnicodeCategory_LowercaseLetter },
    { 7752, 7752, UnicodeCategory_UppercaseLetter },
    { 7753, 7753, UnicodeCategory_LowercaseLetter },
    { 7754, 7754, UnicodeCategory_UppercaseLetter },
    { 7755, 7755, UnicodeCategory_LowercaseLetter },
    { 7756, 7756, UnicodeCategory_UppercaseLetter },
    { 7757, 7757, UnicodeCategory_LowercaseLetter },
    { 7758, 7758, UnicodeCategory_UppercaseLetter },
    { 7759, 7759, UnicodeCategory_LowercaseLetter },
    { 7760, 7760, UnicodeCategory_UppercaseLetter },
    { 7761, 7761, UnicodeCategory_LowercaseLetter },
    { 7762, 7762, UnicodeCategory_UppercaseLetter },
    { 7763, 7763, UnicodeCategory_LowercaseLetter },
    { 7764, 7764, UnicodeCategory_UppercaseLetter },
    { 7765, 7765, UnicodeCategory_LowercaseLetter },
    { 7766, 7766, UnicodeCategory_UppercaseLetter },
    { 7767, 7767, UnicodeCategory_LowercaseLetter },
    { 7768, 7768, UnicodeCategory_UppercaseLetter },
    { 7769, 7769, UnicodeCategory_LowercaseLetter },
    { 7770, 7770, UnicodeCategory_UppercaseLetter },
    { 7771, 7771, UnicodeCategory_LowercaseLetter },
    { 7772, 7772, UnicodeCategory_UppercaseLetter },
    { 7773, 7773, UnicodeCategory_LowercaseLetter },
    { 7774, 7774, UnicodeCategory_UppercaseLetter },
    { 7775, 7775, UnicodeCategory_LowercaseLetter },
    { 7776, 7776, UnicodeCategory_UppercaseLetter },
    { 7777, 7777, UnicodeCategory_LowercaseLetter },
    { 7778, 7778, UnicodeCategory_UppercaseLetter },
    { 7779, 7779, UnicodeCategory_LowercaseLetter },
    { 7780, 7780, UnicodeCategory_UppercaseLetter },
    { 7781, 7781, UnicodeCategory_LowercaseLetter },
    { 7782, 7782, UnicodeCategory_UppercaseLetter },
    { 7783, 7783, UnicodeCategory_LowercaseLetter },
    { 7784, 7784, UnicodeCategory_UppercaseLetter },
    { 7785, 7785, UnicodeCategory_LowercaseLetter },
    { 7786, 7786, UnicodeCategory_UppercaseLetter },
    { 7787, 7787, UnicodeCategory_LowercaseLetter },
    { 7788, 7788, UnicodeCategory_UppercaseLetter },
    { 7789, 7789, UnicodeCategory_LowercaseLetter },
    { 7790, 7790, UnicodeCategory_UppercaseLetter },
    { 7791, 7791, UnicodeCategory_LowercaseLetter },
    { 7792, 7792, UnicodeCategory_UppercaseLetter },
    { 7793, 7793, UnicodeCategory_LowercaseLetter },
    { 7794, 7794, UnicodeCategory_UppercaseLetter },
    { 7795, 7795, UnicodeCategory_LowercaseLetter },
    { 7796, 7796, UnicodeCategory_UppercaseLetter },
    { 7797, 7797, UnicodeCategory_LowercaseLetter },
    { 7798, 7798, UnicodeCategory_UppercaseLetter },
    { 7799, 7799, UnicodeCategory_LowercaseLetter },
    { 7800, 7800, UnicodeCategory_UppercaseLetter },
    { 7801, 7801, UnicodeCategory_LowercaseLetter },
    { 7802, 7802, UnicodeCategory_UppercaseLetter },
    { 7803, 7803, UnicodeCategory_LowercaseLetter },
    { 7804, 7804, UnicodeCategory_UppercaseLetter },
    { 7805, 7805, UnicodeCategory_LowercaseLetter },
    { 7806, 7806, UnicodeCategory_UppercaseLetter },
    { 7807, 7807, UnicodeCategory_LowercaseLetter },
    { 7808, 7808, UnicodeCategory_UppercaseLetter },
    { 7809, 7809, UnicodeCategory_LowercaseLetter },
    { 7810, 7810, UnicodeCategory_UppercaseLetter },
    { 7811, 7811, UnicodeCategory_LowercaseLetter },
    { 7812, 7812, UnicodeCategory_UppercaseLetter },
    { 7813, 7813, UnicodeCategory_LowercaseLetter },
    { 7814, 7814, UnicodeCategory_UppercaseLetter },
    { 7815, 7815, UnicodeCategory_LowercaseLetter },
    { 7816, 7816, UnicodeCategory_UppercaseLetter },
    { 7817, 7817, UnicodeCategory_LowercaseLetter },
    { 7818, 7818, UnicodeCategory_UppercaseLetter },
    { 7819, 7819, UnicodeCategory_LowercaseLetter },
    { 7820, 7820, UnicodeCategory_UppercaseLetter },
    { 7821, 7821, UnicodeCategory_LowercaseLetter },
    { 7822, 7822, UnicodeCategory_UppercaseLetter },
    { 7823, 7823, UnicodeCategory_LowercaseLetter },
    { 7824, 7824, UnicodeCategory_UppercaseLetter },
    { 7825, 7825, UnicodeCategory_LowercaseLetter },
    { 7826, 7826, UnicodeCategory_UppercaseLetter },
    { 7827, 7827, UnicodeCategory_LowercaseLetter },
    { 7828, 7828, UnicodeCategory_UppercaseLetter },
    { 7829, 7835, UnicodeCategory_LowercaseLetter },
    { 7840, 7840, UnicodeCategory_UppercaseLetter },
    { 7841, 7841, UnicodeCategory_LowercaseLetter },
    { 7842, 7842, UnicodeCategory_UppercaseLetter },
    { 7843, 7843, UnicodeCategory_LowercaseLetter },
    { 7844, 7844, UnicodeCategory_UppercaseLetter },
    { 7845, 7845, UnicodeCategory_LowercaseLetter },
    { 7846, 7846, UnicodeCategory_UppercaseLetter },
    { 7847, 7847, UnicodeCategory_LowercaseLetter },
    { 7848, 7848, UnicodeCategory_UppercaseLetter },
    { 7849, 7849, UnicodeCategory_LowercaseLetter },
    { 7850, 7850, UnicodeCategory_UppercaseLetter },
    { 7851, 7851, UnicodeCategory_LowercaseLetter },
    { 7852, 7852, UnicodeCategory_UppercaseLetter },
    { 7853, 7853, UnicodeCategory_LowercaseLetter },
    { 7854, 7854, UnicodeCategory_UppercaseLetter },
    { 7855, 7855, UnicodeCategory_LowercaseLetter },
    { 7856, 7856, UnicodeCategory_UppercaseLetter },
    { 7857, 7857, UnicodeCategory_LowercaseLetter },
    { 7858, 7858, UnicodeCategory_UppercaseLetter },
    { 7859, 7859, UnicodeCategory_LowercaseLetter },
    { 7860, 7860, UnicodeCategory_UppercaseLetter },
    { 7861, 7861, UnicodeCategory_LowercaseLetter },
    { 7862, 7862, UnicodeCategory_UppercaseLetter },
    { 7863, 7863, UnicodeCategory_LowercaseLetter },
    { 7864, 7864, UnicodeCategory_UppercaseLetter },
    { 7865, 7865, UnicodeCategory_LowercaseLetter },
    { 7866, 7866, UnicodeCategory_UppercaseLetter },
    { 7867, 7867, UnicodeCategory_LowercaseLetter },
    { 7868, 7868, UnicodeCategory_UppercaseLetter },
    { 7869, 7869, UnicodeCategory_LowercaseLetter },
    { 7870, 7870, UnicodeCategory_UppercaseLetter },
    { 7871, 7871, UnicodeCategory_LowercaseLetter },
    { 7872, 7872, UnicodeCategory_UppercaseLetter },
    { 7873, 7873, UnicodeCategory_LowercaseLetter },
    { 7874, 7874, UnicodeCategory_UppercaseLetter },
    { 7875, 7875, UnicodeCategory_LowercaseLetter },
    { 7876, 7876, UnicodeCategory_UppercaseLetter },
    { 7877, 7877, UnicodeCategory_LowercaseLetter },
    { 7878, 7878, UnicodeCategory_UppercaseLetter },
    { 7879, 7879, UnicodeCategory_LowercaseLetter },
    { 7880, 7880, UnicodeCategory_UppercaseLetter },
    { 7881, 7881, UnicodeCategory_LowercaseLetter },
    { 7882, 7882, UnicodeCategory_UppercaseLetter },
    { 7883, 7883, UnicodeCategory_LowercaseLetter },
    { 7884, 7884, UnicodeCategory_UppercaseLetter },
    { 7885, 7885, UnicodeCategory_LowercaseLetter },
    { 7886, 7886, UnicodeCategory_UppercaseLetter },
    { 7887, 7887, UnicodeCategory_LowercaseLetter },
    { 7888, 7888, UnicodeCategory_UppercaseLetter },
    { 7889, 7889, UnicodeCategory_LowercaseLetter },
    { 7890, 7890, UnicodeCategory_UppercaseLetter },
    { 7891, 7891, UnicodeCategory_LowercaseLetter },
    { 7892, 7892, UnicodeCategory_UppercaseLetter },
    { 7893, 7893, UnicodeCategory_LowercaseLetter },
    { 7894, 7894, UnicodeCategory_UppercaseLetter },
    { 7895, 7895, UnicodeCategory_LowercaseLetter },
    { 7896, 7896, UnicodeCategory_UppercaseLetter },
    { 7897, 7897, UnicodeCategory_LowercaseLetter },
    { 7898, 7898, UnicodeCategory_UppercaseLetter },
    { 7899, 7899, UnicodeCategory_LowercaseLetter },
    { 7900, 7900, UnicodeCategory_UppercaseLetter },
    { 7901, 7901, UnicodeCategory_LowercaseLetter },
    { 7902, 7902, UnicodeCategory_UppercaseLetter },
    { 7903, 7903, UnicodeCategory_LowercaseLetter },
    { 7904, 7904, UnicodeCategory_UppercaseLetter },
    { 7905, 7905, UnicodeCategory_LowercaseLetter },
    { 7906, 7906, UnicodeCategory_UppercaseLetter },
    { 7907, 7907, UnicodeCategory_LowercaseLetter },
    { 7908, 7908, UnicodeCategory_UppercaseLetter },
    { 7909, 7909, UnicodeCategory_LowercaseLetter },
    { 7910, 7910, UnicodeCategory_UppercaseLetter },
    { 7911, 7911, UnicodeCategory_LowercaseLetter },
    { 7912, 7912, UnicodeCategory_UppercaseLetter },
    { 7913, 7913, UnicodeCategory_LowercaseLetter },
    { 7914, 7914, UnicodeCategory_UppercaseLetter },
    { 7915, 7915, UnicodeCategory_LowercaseLetter },
    { 7916, 7916, UnicodeCategory_UppercaseLetter },
    { 7917, 7917, UnicodeCategory_LowercaseLetter },
    { 7918, 7918, UnicodeCategory_UppercaseLetter },
    { 7919, 7919, UnicodeCategory_LowercaseLetter },
    { 7920, 7920, UnicodeCategory_UppercaseLetter },
    { 7921, 7921, UnicodeCategory_LowercaseLetter },
    { 7922, 7922, UnicodeCategory_UppercaseLetter },
    { 7923, 7923, UnicodeCategory_LowercaseLetter },
    { 7924, 7924, UnicodeCategory_UppercaseLetter },
    { 7925, 7925, UnicodeCategory_LowercaseLetter },
    { 7926, 7926, UnicodeCategory_UppercaseLetter },
    { 7927, 7927, UnicodeCategory_LowercaseLetter },
    { 7928, 7928, UnicodeCategory_UppercaseLetter },
    { 7929, 7929, UnicodeCategory_LowercaseLetter },
    { 7936, 7943, UnicodeCategory_LowercaseLetter },
    { 7944, 7951, UnicodeCategory_UppercaseLetter },
    { 7952, 7957, UnicodeCategory_LowercaseLetter },
    { 7960, 7965, UnicodeCategory_UppercaseLetter },
    { 7968, 7975, UnicodeCategory_LowercaseLetter },
    { 7976, 7983, UnicodeCategory_UppercaseLetter },
    { 7984, 7991, UnicodeCategory_LowercaseLetter },
    { 7992, 7999, UnicodeCategory_UppercaseLetter },
    { 8000, 8005, UnicodeCategory_LowercaseLetter },
    { 8008, 8013, UnicodeCategory_UppercaseLetter },
    { 8016, 8023, UnicodeCategory_LowercaseLetter },
    { 8025, 8025, UnicodeCategory_UppercaseLetter },
    { 8027, 8027, UnicodeCategory_UppercaseLetter },
    { 8029, 8029, UnicodeCategory_UppercaseLetter },
    { 8031, 8031, UnicodeCategory_UppercaseLetter },
    { 8032, 8039, UnicodeCategory_LowercaseLetter },
    { 8040, 8047, UnicodeCategory_UppercaseLetter },
    { 8048, 8061, UnicodeCategory_LowercaseLetter },
    { 8064, 8071, UnicodeCategory_LowercaseLetter },
    { 8072, 8079, UnicodeCategory_TitleccaseLetter },
    { 8080, 8087, UnicodeCategory_LowercaseLetter },
    { 8088, 8095, UnicodeCategory_TitleccaseLetter },
    { 8096, 8103, UnicodeCategory_LowercaseLetter },
    { 8104, 8111, UnicodeCategory_TitleccaseLetter },
    { 8112, 8116, UnicodeCategory_LowercaseLetter },
    { 8118, 8119, UnicodeCategory_LowercaseLetter },
    { 8120, 8123, UnicodeCategory_UppercaseLetter },
    { 8124, 8124, UnicodeCategory_TitleccaseLetter },
    { 8125, 8125, UnicodeCategory_ModifierName },
    { 8126, 8126, UnicodeCategory_LowercaseLetter },
    { 8127, 8129, UnicodeCategory_ModifierName },
    { 8130, 8132, UnicodeCategory_LowercaseLetter },
    { 8134, 8135, UnicodeCategory_LowercaseLetter },
    { 8136, 8139, UnicodeCategory_UppercaseLetter },
    { 8140, 8140, UnicodeCategory_TitleccaseLetter },
    { 8141, 8143, UnicodeCategory_ModifierName },
    { 8144, 8147, UnicodeCategory_LowercaseLetter },
    { 8150, 8151, UnicodeCategory_LowercaseLetter },
    { 8152, 8155, UnicodeCategory_UppercaseLetter },
    { 8157, 8159, UnicodeCategory_ModifierName },
    { 8160, 8167, UnicodeCategory_LowercaseLetter },
    { 8168, 8172, UnicodeCategory_UppercaseLetter },
    { 8173, 8175, UnicodeCategory_ModifierName },
    { 8178, 8180, UnicodeCategory_LowercaseLetter },
    { 8182, 8183, UnicodeCategory_LowercaseLetter },
    { 8184, 8187, UnicodeCategory_UppercaseLetter },
    { 8188, 8188, UnicodeCategory_TitleccaseLetter },
    { 8189, 8190, UnicodeCategory_ModifierName },
    { 8192, 8202, UnicodeCategory_SpaceSeparator },
    { 8203, 8207, UnicodeCategory_OtherFormat },
    { 8208, 8213, UnicodeCategory_DashPunctuation },
    { 8214, 8215,  UnicodeCategory_OtherPunctuation },
    { 8216, 8216, UnicodeCategory_InitialPunctuation },
    { 8217, 8217, UnicodeCategory_FinalPunctuation },
    { 8218, 8218, UnicodeCategory_OpenPunctuation },
    { 8219, 8220, UnicodeCategory_InitialPunctuation },
    { 8221, 8221, UnicodeCategory_FinalPunctuation },
    { 8222, 8222, UnicodeCategory_OpenPunctuation },
    { 8223, 8223, UnicodeCategory_InitialPunctuation },
    { 8224, 8231,  UnicodeCategory_OtherPunctuation },
    { 8232, 8232, UnicodeCategory_LineSeparator },
    { 8233, 8233, UnicodeCategory_ParagraphSeparator },
    { 8234, 8238, UnicodeCategory_OtherFormat },
    { 8239, 8239, UnicodeCategory_SpaceSeparator },
    { 8240, 8248,  UnicodeCategory_OtherPunctuation },
    { 8249, 8249, UnicodeCategory_InitialPunctuation },
    { 8250, 8250, UnicodeCategory_FinalPunctuation },
    { 8251, 8254,  UnicodeCategory_OtherPunctuation },
    { 8255, 8256, UnicodeCategory_ConnectorPunctuation },
    { 8257, 8259,  UnicodeCategory_OtherPunctuation },
    { 8260, 8260, UnicodeCategory_MathName },
    { 8261, 8261, UnicodeCategory_OpenPunctuation },
    { 8262, 8262, UnicodeCategory_ClosePunctuation },
    { 8263, 8273,  UnicodeCategory_OtherPunctuation },
    { 8274, 8274, UnicodeCategory_MathName },
    { 8275, 8275,  UnicodeCategory_OtherPunctuation },
    { 8276, 8276, UnicodeCategory_ConnectorPunctuation },
    { 8279, 8279,  UnicodeCategory_OtherPunctuation },
    { 8287, 8287, UnicodeCategory_SpaceSeparator },
    { 8288, 8291, UnicodeCategory_OtherFormat },
    { 8298, 8303, UnicodeCategory_OtherFormat },
    { 8304, 8304, UnicodeCategory_OtherNumber },
    { 8305, 8305, UnicodeCategory_LowercaseLetter },
    { 8308, 8313, UnicodeCategory_OtherNumber },
    { 8314, 8316, UnicodeCategory_MathName },
    { 8317, 8317, UnicodeCategory_OpenPunctuation },
    { 8318, 8318, UnicodeCategory_ClosePunctuation },
    { 8319, 8319, UnicodeCategory_LowercaseLetter },
    { 8320, 8329, UnicodeCategory_OtherNumber },
    { 8330, 8332, UnicodeCategory_MathName },
    { 8333, 8333, UnicodeCategory_OpenPunctuation },
    { 8334, 8334, UnicodeCategory_ClosePunctuation },
    { 8352, 8369, UnicodeCategory_CurrencyName },
    { 8400, 8412, UnicodeCategory_NonSpacingMark },
    { 8413, 8416, UnicodeCategory_EnclosingMark },
    { 8417, 8417, UnicodeCategory_NonSpacingMark },
    { 8418, 8420, UnicodeCategory_EnclosingMark },
    { 8421, 8426, UnicodeCategory_NonSpacingMark },
    { 8448, 8449, UnicodeCategory_OtherName },
    { 8450, 8450, UnicodeCategory_UppercaseLetter },
    { 8451, 8454, UnicodeCategory_OtherName },
    { 8455, 8455, UnicodeCategory_UppercaseLetter },
    { 8456, 8457, UnicodeCategory_OtherName },
    { 8458, 8458, UnicodeCategory_LowercaseLetter },
    { 8459, 8461, UnicodeCategory_UppercaseLetter },
    { 8462, 8463, UnicodeCategory_LowercaseLetter },
    { 8464, 8466, UnicodeCategory_UppercaseLetter },
    { 8467, 8467, UnicodeCategory_LowercaseLetter },
    { 8468, 8468, UnicodeCategory_OtherName },
    { 8469, 8469, UnicodeCategory_UppercaseLetter },
    { 8470, 8472, UnicodeCategory_OtherName },
    { 8473, 8477, UnicodeCategory_UppercaseLetter },
    { 8478, 8483, UnicodeCategory_OtherName },
    { 8484, 8484, UnicodeCategory_UppercaseLetter },
    { 8485, 8485, UnicodeCategory_OtherName },
    { 8486, 8486, UnicodeCategory_UppercaseLetter },
    { 8487, 8487, UnicodeCategory_OtherName },
    { 8488, 8488, UnicodeCategory_UppercaseLetter },
    { 8489, 8489, UnicodeCategory_OtherName },
    { 8490, 8493, UnicodeCategory_UppercaseLetter },
    { 8494, 8494, UnicodeCategory_OtherName },
    { 8495, 8495, UnicodeCategory_LowercaseLetter },
    { 8496, 8497, UnicodeCategory_UppercaseLetter },
    { 8498, 8498, UnicodeCategory_OtherName },
    { 8499, 8499, UnicodeCategory_UppercaseLetter },
    { 8500, 8500, UnicodeCategory_LowercaseLetter },
    { 8501, 8504, UnicodeCategory_OtherLetter },
    { 8505, 8505, UnicodeCategory_LowercaseLetter },
    { 8506, 8507, UnicodeCategory_OtherName },
    { 8509, 8509, UnicodeCategory_LowercaseLetter },
    { 8510, 8511, UnicodeCategory_UppercaseLetter },
    { 8512, 8516, UnicodeCategory_MathName },
    { 8517, 8517, UnicodeCategory_UppercaseLetter },
    { 8518, 8521, UnicodeCategory_LowercaseLetter },
    { 8522, 8522, UnicodeCategory_OtherName },
    { 8523, 8523, UnicodeCategory_MathName },
    { 8531, 8543, UnicodeCategory_OtherNumber },
    { 8544, 8579, UnicodeCategory_LetterNumber },
    { 8592, 8596, UnicodeCategory_MathName },
    { 8597, 8601, UnicodeCategory_OtherName },
    { 8602, 8603, UnicodeCategory_MathName },
    { 8604, 8607, UnicodeCategory_OtherName },
    { 8608, 8608, UnicodeCategory_MathName },
    { 8609, 8610, UnicodeCategory_OtherName },
    { 8611, 8611, UnicodeCategory_MathName },
    { 8612, 8613, UnicodeCategory_OtherName },
    { 8614, 8614, UnicodeCategory_MathName },
    { 8615, 8621, UnicodeCategory_OtherName },
    { 8622, 8622, UnicodeCategory_MathName },
    { 8623, 8653, UnicodeCategory_OtherName },
    { 8654, 8655, UnicodeCategory_MathName },
    { 8656, 8657, UnicodeCategory_OtherName },
    { 8658, 8658, UnicodeCategory_MathName },
    { 8659, 8659, UnicodeCategory_OtherName },
    { 8660, 8660, UnicodeCategory_MathName },
    { 8661, 8691, UnicodeCategory_OtherName },
    { 8692, 8959, UnicodeCategory_MathName },
    { 8960, 8967, UnicodeCategory_OtherName },
    { 8968, 8971, UnicodeCategory_MathName },
    { 8972, 8991, UnicodeCategory_OtherName },
    { 8992, 8993, UnicodeCategory_MathName },
    { 8994, 9000, UnicodeCategory_OtherName },
    { 9001, 9001, UnicodeCategory_OpenPunctuation },
    { 9002, 9002, UnicodeCategory_ClosePunctuation },
    { 9003, 9083, UnicodeCategory_OtherName },
    { 9084, 9084, UnicodeCategory_MathName },
    { 9085, 9114, UnicodeCategory_OtherName },
    { 9115, 9139, UnicodeCategory_MathName },
    { 9140, 9140, UnicodeCategory_OpenPunctuation },
    { 9141, 9141, UnicodeCategory_ClosePunctuation },
    { 9142, 9142,  UnicodeCategory_OtherPunctuation },
    { 9143, 9168, UnicodeCategory_OtherName },
    { 9216, 9254, UnicodeCategory_OtherName },
    { 9280, 9290, UnicodeCategory_OtherName },
    { 9312, 9371, UnicodeCategory_OtherNumber },
    { 9372, 9449, UnicodeCategory_OtherName },
    { 9450, 9471, UnicodeCategory_OtherNumber },
    { 9472, 9654, UnicodeCategory_OtherName },
    { 9655, 9655, UnicodeCategory_MathName },
    { 9656, 9664, UnicodeCategory_OtherName },
    { 9665, 9665, UnicodeCategory_MathName },
    { 9666, 9719, UnicodeCategory_OtherName },
    { 9720, 9727, UnicodeCategory_MathName },
    { 9728, 9751, UnicodeCategory_OtherName },
    { 9753, 9838, UnicodeCategory_OtherName },
    { 9839, 9839, UnicodeCategory_MathName },
    { 9840, 9853, UnicodeCategory_OtherName },
    { 9856, 9873, UnicodeCategory_OtherName },
    { 9888, 9889, UnicodeCategory_OtherName },
    { 9985, 9988, UnicodeCategory_OtherName },
    { 9990, 9993, UnicodeCategory_OtherName },
    { 9996, 10023, UnicodeCategory_OtherName },
    { 10025, 10059, UnicodeCategory_OtherName },
    { 10061, 10061, UnicodeCategory_OtherName },
    { 10063, 10066, UnicodeCategory_OtherName },
    { 10070, 10070, UnicodeCategory_OtherName },
    { 10072, 10078, UnicodeCategory_OtherName },
    { 10081, 10087, UnicodeCategory_OtherName },
    { 10088, 10088, UnicodeCategory_OpenPunctuation },
    { 10089, 10089, UnicodeCategory_ClosePunctuation },
    { 10090, 10090, UnicodeCategory_OpenPunctuation },
    { 10091, 10091, UnicodeCategory_ClosePunctuation },
    { 10092, 10092, UnicodeCategory_OpenPunctuation },
    { 10093, 10093, UnicodeCategory_ClosePunctuation },
    { 10094, 10094, UnicodeCategory_OpenPunctuation },
    { 10095, 10095, UnicodeCategory_ClosePunctuation },
    { 10096, 10096, UnicodeCategory_OpenPunctuation },
    { 10097, 10097, UnicodeCategory_ClosePunctuation },
    { 10098, 10098, UnicodeCategory_OpenPunctuation },
    { 10099, 10099, UnicodeCategory_ClosePunctuation },
    { 10100, 10100, UnicodeCategory_OpenPunctuation },
    { 10101, 10101, UnicodeCategory_ClosePunctuation },
    { 10102, 10131, UnicodeCategory_OtherNumber },
    { 10132, 10132, UnicodeCategory_OtherName },
    { 10136, 10159, UnicodeCategory_OtherName },
    { 10161, 10174, UnicodeCategory_OtherName },
    { 10192, 10213, UnicodeCategory_MathName },
    { 10214, 10214, UnicodeCategory_OpenPunctuation },
    { 10215, 10215, UnicodeCategory_ClosePunctuation },
    { 10216, 10216, UnicodeCategory_OpenPunctuation },
    { 10217, 10217, UnicodeCategory_ClosePunctuation },
    { 10218, 10218, UnicodeCategory_OpenPunctuation },
    { 10219, 10219, UnicodeCategory_ClosePunctuation },
    { 10224, 10239, UnicodeCategory_MathName },
    { 10240, 10495, UnicodeCategory_OtherName },
    { 10496, 10626, UnicodeCategory_MathName },
    { 10627, 10627, UnicodeCategory_OpenPunctuation },
    { 10628, 10628, UnicodeCategory_ClosePunctuation },
    { 10629, 10629, UnicodeCategory_OpenPunctuation },
    { 10630, 10630, UnicodeCategory_ClosePunctuation },
    { 10631, 10631, UnicodeCategory_OpenPunctuation },
    { 10632, 10632, UnicodeCategory_ClosePunctuation },
    { 10633, 10633, UnicodeCategory_OpenPunctuation },
    { 10634, 10634, UnicodeCategory_ClosePunctuation },
    { 10635, 10635, UnicodeCategory_OpenPunctuation },
    { 10636, 10636, UnicodeCategory_ClosePunctuation },
    { 10637, 10637, UnicodeCategory_OpenPunctuation },
    { 10638, 10638, UnicodeCategory_ClosePunctuation },
    { 10639, 10639, UnicodeCategory_OpenPunctuation },
    { 10640, 10640, UnicodeCategory_ClosePunctuation },
    { 10641, 10641, UnicodeCategory_OpenPunctuation },
    { 10642, 10642, UnicodeCategory_ClosePunctuation },
    { 10643, 10643, UnicodeCategory_OpenPunctuation },
    { 10644, 10644, UnicodeCategory_ClosePunctuation },
    { 10645, 10645, UnicodeCategory_OpenPunctuation },
    { 10646, 10646, UnicodeCategory_ClosePunctuation },
    { 10647, 10647, UnicodeCategory_OpenPunctuation },
    { 10648, 10648, UnicodeCategory_ClosePunctuation },
    { 10649, 10711, UnicodeCategory_MathName },
    { 10712, 10712, UnicodeCategory_OpenPunctuation },
    { 10713, 10713, UnicodeCategory_ClosePunctuation },
    { 10714, 10714, UnicodeCategory_OpenPunctuation },
    { 10715, 10715, UnicodeCategory_ClosePunctuation },
    { 10716, 10747, UnicodeCategory_MathName },
    { 10748, 10748, UnicodeCategory_OpenPunctuation },
    { 10749, 10749, UnicodeCategory_ClosePunctuation },
    { 10750, 11007, UnicodeCategory_MathName },
    { 11008, 11021, UnicodeCategory_OtherName },
    { 11904, 11929, UnicodeCategory_OtherName },
    { 11931, 12019, UnicodeCategory_OtherName },
    { 12032, 12245, UnicodeCategory_OtherName },
    { 12272, 12283, UnicodeCategory_OtherName },
    { 12288, 12288, UnicodeCategory_SpaceSeparator },
    { 12289, 12291,  UnicodeCategory_OtherPunctuation },
    { 12292, 12292, UnicodeCategory_OtherName },
    { 12293, 12293, UnicodeCategory_ModifierLetter },
    { 12294, 12294, UnicodeCategory_OtherLetter },
    { 12295, 12295, UnicodeCategory_LetterNumber },
    { 12296, 12296, UnicodeCategory_OpenPunctuation },
    { 12297, 12297, UnicodeCategory_ClosePunctuation },
    { 12298, 12298, UnicodeCategory_OpenPunctuation },
    { 12299, 12299, UnicodeCategory_ClosePunctuation },
    { 12300, 12300, UnicodeCategory_OpenPunctuation },
    { 12301, 12301, UnicodeCategory_ClosePunctuation },
    { 12302, 12302, UnicodeCategory_OpenPunctuation },
    { 12303, 12303, UnicodeCategory_ClosePunctuation },
    { 12304, 12304, UnicodeCategory_OpenPunctuation },
    { 12305, 12305, UnicodeCategory_ClosePunctuation },
    { 12306, 12307, UnicodeCategory_OtherName },
    { 12308, 12308, UnicodeCategory_OpenPunctuation },
    { 12309, 12309, UnicodeCategory_ClosePunctuation },
    { 12310, 12310, UnicodeCategory_OpenPunctuation },
    { 12311, 12311, UnicodeCategory_ClosePunctuation },
    { 12312, 12312, UnicodeCategory_OpenPunctuation },
    { 12313, 12313, UnicodeCategory_ClosePunctuation },
    { 12314, 12314, UnicodeCategory_OpenPunctuation },
    { 12315, 12315, UnicodeCategory_ClosePunctuation },
    { 12316, 12316, UnicodeCategory_DashPunctuation },
    { 12317, 12317, UnicodeCategory_OpenPunctuation },
    { 12318, 12319, UnicodeCategory_ClosePunctuation },
    { 12320, 12320, UnicodeCategory_OtherName },
    { 12321, 12329, UnicodeCategory_LetterNumber },
    { 12330, 12335, UnicodeCategory_NonSpacingMark },
    { 12336, 12336, UnicodeCategory_DashPunctuation },
    { 12337, 12341, UnicodeCategory_ModifierLetter },
    { 12342, 12343, UnicodeCategory_OtherName },
    { 12344, 12346, UnicodeCategory_LetterNumber },
    { 12347, 12347, UnicodeCategory_ModifierLetter },
    { 12348, 12348, UnicodeCategory_OtherLetter },
    { 12349, 12349,  UnicodeCategory_OtherPunctuation },
    { 12350, 12351, UnicodeCategory_OtherName },
    { 12353, 12438, UnicodeCategory_OtherLetter },
    { 12441, 12442, UnicodeCategory_NonSpacingMark },
    { 12443, 12444, UnicodeCategory_ModifierName },
    { 12445, 12446, UnicodeCategory_ModifierLetter },
    { 12447, 12447, UnicodeCategory_OtherLetter },
    { 12448, 12448, UnicodeCategory_DashPunctuation },
    { 12449, 12538, UnicodeCategory_OtherLetter },
    { 12539, 12539, UnicodeCategory_ConnectorPunctuation },
    { 12540, 12542, UnicodeCategory_ModifierLetter },
    { 12543, 12543, UnicodeCategory_OtherLetter },
    { 12549, 12588, UnicodeCategory_OtherLetter },
    { 12593, 12686, UnicodeCategory_OtherLetter },
    { 12688, 12689, UnicodeCategory_OtherName },
    { 12690, 12693, UnicodeCategory_OtherNumber },
    { 12694, 12703, UnicodeCategory_OtherName },
    { 12704, 12727, UnicodeCategory_OtherLetter },
    { 12784, 12799, UnicodeCategory_OtherLetter },
    { 12800, 12830, UnicodeCategory_OtherName },
    { 12832, 12841, UnicodeCategory_OtherNumber },
    { 12842, 12867, UnicodeCategory_OtherName },
    { 12880, 12880, UnicodeCategory_OtherName },
    { 12881, 12895, UnicodeCategory_OtherNumber },
    { 12896, 12925, UnicodeCategory_OtherName },
    { 12927, 12927, UnicodeCategory_OtherName },
    { 12928, 12937, UnicodeCategory_OtherNumber },
    { 12938, 12976, UnicodeCategory_OtherName },
    { 12977, 12991, UnicodeCategory_OtherNumber },
    { 12992, 13054, UnicodeCategory_OtherName },
    { 13056, 13311, UnicodeCategory_OtherName },
    { 13312, 13312, UnicodeCategory_OtherLetter },
    { 19893, 19893, UnicodeCategory_OtherLetter },
    { 19904, 19967, UnicodeCategory_OtherName },
    { 19968, 40869, UnicodeCategory_OtherLetter },
    { 40960, 42124, UnicodeCategory_OtherLetter },
    { 42128, 42182, UnicodeCategory_OtherName },
    { 44032, 44032, UnicodeCategory_OtherLetter },
    { 55203, 55203, UnicodeCategory_OtherLetter },
    { 55296, 55296, UnicodeCategory_OtherSurrogate },
    { 56191, 56192, UnicodeCategory_OtherSurrogate },
    { 56319, 56320, UnicodeCategory_OtherSurrogate },
    { 57343, 57343, UnicodeCategory_OtherSurrogate },
    { 57344, 57344, UnicodeCategory_OtherPrivateUse },
    { 63743, 63743, UnicodeCategory_OtherPrivateUse },
    { 63744, 64045, UnicodeCategory_OtherLetter },
    { 64048, 64106, UnicodeCategory_OtherLetter },
    { 64256, 64262, UnicodeCategory_LowercaseLetter },
    { 64275, 64279, UnicodeCategory_LowercaseLetter },
    { 64285, 64285, UnicodeCategory_OtherLetter },
    { 64286, 64286, UnicodeCategory_NonSpacingMark },
    { 64287, 64296, UnicodeCategory_OtherLetter },
    { 64297, 64297, UnicodeCategory_MathName },
    { 64298, 64310, UnicodeCategory_OtherLetter },
    { 64312, 64316, UnicodeCategory_OtherLetter },
    { 64318, 64318, UnicodeCategory_OtherLetter },
    { 64320, 64321, UnicodeCategory_OtherLetter },
    { 64323, 64324, UnicodeCategory_OtherLetter },
    { 64326, 64433, UnicodeCategory_OtherLetter },
    { 64467, 64829, UnicodeCategory_OtherLetter },
    { 64830, 64830, UnicodeCategory_OpenPunctuation },
    { 64831, 64831, UnicodeCategory_ClosePunctuation },
    { 64848, 64911, UnicodeCategory_OtherLetter },
    { 64914, 64967, UnicodeCategory_OtherLetter },
    { 65008, 65019, UnicodeCategory_OtherLetter },
    { 65020, 65020, UnicodeCategory_CurrencyName },
    { 65021, 65021, UnicodeCategory_OtherName },
    { 65024, 65039, UnicodeCategory_NonSpacingMark },
    { 65056, 65059, UnicodeCategory_NonSpacingMark },
    { 65072, 65072,  UnicodeCategory_OtherPunctuation },
    { 65073, 65074, UnicodeCategory_DashPunctuation },
    { 65075, 65076, UnicodeCategory_ConnectorPunctuation },
    { 65077, 65077, UnicodeCategory_OpenPunctuation },
    { 65078, 65078, UnicodeCategory_ClosePunctuation },
    { 65079, 65079, UnicodeCategory_OpenPunctuation },
    { 65080, 65080, UnicodeCategory_ClosePunctuation },
    { 65081, 65081, UnicodeCategory_OpenPunctuation },
    { 65082, 65082, UnicodeCategory_ClosePunctuation },
    { 65083, 65083, UnicodeCategory_OpenPunctuation },
    { 65084, 65084, UnicodeCategory_ClosePunctuation },
    { 65085, 65085, UnicodeCategory_OpenPunctuation },
    { 65086, 65086, UnicodeCategory_ClosePunctuation },
    { 65087, 65087, UnicodeCategory_OpenPunctuation },
    { 65088, 65088, UnicodeCategory_ClosePunctuation },
    { 65089, 65089, UnicodeCategory_OpenPunctuation },
    { 65090, 65090, UnicodeCategory_ClosePunctuation },
    { 65091, 65091, UnicodeCategory_OpenPunctuation },
    { 65092, 65092, UnicodeCategory_ClosePunctuation },
    { 65093, 65094,  UnicodeCategory_OtherPunctuation },
    { 65095, 65095, UnicodeCategory_OpenPunctuation },
    { 65096, 65096, UnicodeCategory_ClosePunctuation },
    { 65097, 65100,  UnicodeCategory_OtherPunctuation },
    { 65101, 65103, UnicodeCategory_ConnectorPunctuation },
    { 65104, 65106,  UnicodeCategory_OtherPunctuation },
    { 65108, 65111,  UnicodeCategory_OtherPunctuation },
    { 65112, 65112, UnicodeCategory_DashPunctuation },
    { 65113, 65113, UnicodeCategory_OpenPunctuation },
    { 65114, 65114, UnicodeCategory_ClosePunctuation },
    { 65115, 65115, UnicodeCategory_OpenPunctuation },
    { 65116, 65116, UnicodeCategory_ClosePunctuation },
    { 65117, 65117, UnicodeCategory_OpenPunctuation },
    { 65118, 65118, UnicodeCategory_ClosePunctuation },
    { 65119, 65121,  UnicodeCategory_OtherPunctuation },
    { 65122, 65122, UnicodeCategory_MathName },
    { 65123, 65123, UnicodeCategory_DashPunctuation },
    { 65124, 65126, UnicodeCategory_MathName },
    { 65128, 65128,  UnicodeCategory_OtherPunctuation },
    { 65129, 65129, UnicodeCategory_CurrencyName },
    { 65130, 65131,  UnicodeCategory_OtherPunctuation },
    { 65136, 65140, UnicodeCategory_OtherLetter },
    { 65142, 65276, UnicodeCategory_OtherLetter },
    { 65279, 65279, UnicodeCategory_OtherFormat },
    { 65281, 65283,  UnicodeCategory_OtherPunctuation },
    { 65284, 65284, UnicodeCategory_CurrencyName },
    { 65285, 65287,  UnicodeCategory_OtherPunctuation },
    { 65288, 65288, UnicodeCategory_OpenPunctuation },
    { 65289, 65289, UnicodeCategory_ClosePunctuation },
    { 65290, 65290,  UnicodeCategory_OtherPunctuation },
    { 65291, 65291, UnicodeCategory_MathName },
    { 65292, 65292,  UnicodeCategory_OtherPunctuation },
    { 65293, 65293, UnicodeCategory_DashPunctuation },
    { 65294, 65295,  UnicodeCategory_OtherPunctuation },
    { 65296, 65305, UnicodeCategory_DecimalDigitNumber },
    { 65306, 65307,  UnicodeCategory_OtherPunctuation },
    { 65308, 65310, UnicodeCategory_MathName },
    { 65311, 65312,  UnicodeCategory_OtherPunctuation },
    { 65313, 65338, UnicodeCategory_UppercaseLetter },
    { 65339, 65339, UnicodeCategory_OpenPunctuation },
    { 65340, 65340,  UnicodeCategory_OtherPunctuation },
    { 65341, 65341, UnicodeCategory_ClosePunctuation },
    { 65342, 65342, UnicodeCategory_ModifierName },
    { 65343, 65343, UnicodeCategory_ConnectorPunctuation },
    { 65344, 65344, UnicodeCategory_ModifierName },
    { 65345, 65370, UnicodeCategory_LowercaseLetter },
    { 65371, 65371, UnicodeCategory_OpenPunctuation },
    { 65372, 65372, UnicodeCategory_MathName },
    { 65373, 65373, UnicodeCategory_ClosePunctuation },
    { 65374, 65374, UnicodeCategory_MathName },
    { 65375, 65375, UnicodeCategory_OpenPunctuation },
    { 65376, 65376, UnicodeCategory_ClosePunctuation },
    { 65377, 65377,  UnicodeCategory_OtherPunctuation },
    { 65378, 65378, UnicodeCategory_OpenPunctuation },
    { 65379, 65379, UnicodeCategory_ClosePunctuation },
    { 65380, 65380,  UnicodeCategory_OtherPunctuation },
    { 65381, 65381, UnicodeCategory_ConnectorPunctuation },
    { 65382, 65391, UnicodeCategory_OtherLetter },
    { 65392, 65392, UnicodeCategory_ModifierLetter },
    { 65393, 65437, UnicodeCategory_OtherLetter },
    { 65438, 65439, UnicodeCategory_ModifierLetter },
    { 65440, 65470, UnicodeCategory_OtherLetter },
    { 65474, 65479, UnicodeCategory_OtherLetter },
    { 65482, 65487, UnicodeCategory_OtherLetter },
    { 65490, 65495, UnicodeCategory_OtherLetter },
    { 65498, 65500, UnicodeCategory_OtherLetter },
    { 65504, 65505, UnicodeCategory_CurrencyName },
    { 65506, 65506, UnicodeCategory_MathName },
    { 65507, 65507, UnicodeCategory_ModifierName },
    { 65508, 65508, UnicodeCategory_OtherName },
    { 65509, 65510, UnicodeCategory_CurrencyName },
    { 65512, 65512, UnicodeCategory_OtherName },
    { 65513, 65516, UnicodeCategory_MathName },
    { 65517, 65518, UnicodeCategory_OtherName },
    { 65529, 65531, UnicodeCategory_OtherFormat },
    { 65532, 65533, UnicodeCategory_OtherName },
}; // s_rgoCatEntry

static uint8 s_rgbChar[sizeof(Char) * (Char::MaxValue + 1)];

// [G]
char16 Char::GetCode() const {
  auto const iValue = reinterpret_cast<intptr_t>(this);
  auto const iBase = reinterpret_cast<intptr_t>(s_rgbChar);
  return static_cast<char16>((iValue - iBase) / sizeof(Char));
} // GetCode

// [I]
void Char::Init() {
  for (
    auto p = &k_rgoCatEntry[0];
    p < &k_rgoCatEntry[lengthof(k_rgoCatEntry)];
    p++) {
    for (auto nCode = p->m_nMin; nCode <= p->m_nMax; nCode++) {
      auto pChar = new(Char::New(nCode)) Char();
      pChar->m_eUnicodeCategory = p->m_eCategory;
    } // for nCode
  } // for p
} // Init

// [N]
Char* Char::New(uint const nCode) {
  ASSERT(nCode <= MaxValue);
  return reinterpret_cast<Char*>(s_rgbChar + sizeof(Char) * nCode);
} // New

// [T]
String Char::ToString() const {
  char16 wch = GetCode();
  return String(&wch, 1);
} // ToString

} // Common
